【OpenCV • c++】图像几何变换 | 图像平移

  • 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
  • 作    者:锡兰_CC ❣️
  • 专    栏:【OpenCV • c++】计算机视觉
  • 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力

文章目录

    • 前言
    • 图像平移
      • 平移原理
    • 代码演示
      • 图像平移,图像大小不变
      • 图像平移,图像大小改变

前言

  图像的几何变换是指在不改变图像像素值的前提下对图像像素进行空间几何变换,常见的几何变换有距离变换、坐标映射、平移、镜像、旋转、缩放、仿射交换等等。图像的几何变换是图像处理和分析的基础,应用广泛。

图像平移

  图像的平移操作是将图像的所有像素坐标进行水平或垂直方向移动,也就是将所有像素点按照给定的偏移量在水平方向沿 x 轴、垂直方向上沿 y 轴移动。平移变换分为两种类型:图像大小变化与图像大小不变。第一种类型保证图像平移的完整信息,第二种图像导致原始图像的部分信息可能丢失。

平移原理

   我们对图像进行逐像素操作,遍历需要平移的图像,将需要平移的图像的每个像素点进行操作,存储在返回图像中,实现平移操作。

代码演示

图像平移,图像大小不变

   在这里,我们设置返回图像的大小,遍历需要平移的图像的每个像素点,存储在返回图像中,最后进行返回操作。

#include
#include
#include
#include
using namespace std;
using namespace cv;

//平移操作,图像大小不变
Mat imgTranslation1(Mat& src, int xOffset, int yOffset)
{
	int nRows = src.rows;
	int nCols = src.cols;
	Mat result(src.size(), src.type());
	//遍历图像
	for (int i = 0; i < nRows; ++i)
	{
		for (int j = 0; j < nCols; ++j)
		{
			int x = j - xOffset;
			int y = i - yOffset;
			if (x >= 0 && y >= 0 && x < nCols && y < nRows)
			{
				result.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x];
			}
		}
	}
	return result;
}

int main()
{
	Mat src = imread("C://Users//86173//Desktop//cc.png");
	if (!src.data)
		return -1;
	imshow("src", src);
	int xOffset = 50, yOffset = 80;
	//图像左平移不改变大小
	Mat dst1 = imgTranslation1(src, xOffset, yOffset);
	imshow("dst1", dst1);
	waitKey(0);
	return 0;
}

【OpenCV • c++】图像几何变换 | 图像平移_第1张图片

图像平移,图像大小改变

   在这里我们需要改变图像的大小,因此在初始化返回图像时要进行注意设置平移尺寸。

#include
#include
#include
#include
using namespace std;
using namespace cv;

//平移操作,图像大小改变
Mat imgTranslation2(Mat& src, int xOffset, int yOffset)
{
	//设置平移尺寸
	int nRows = src.rows + abs(yOffset);
	int nCols = src.cols + abs(xOffset);
	Mat result(nRows, nCols, src.type());
	//遍历图像
	for (int i = 0; i < nRows; ++i)
	{
		for (int j = 0; j < nCols; ++j)
		{
			//映射变换
			int x = j - xOffset;
			int y = i - yOffset;
			if (x >= 0 && y >= 0 && x < nCols && y < nRows)
			{
				result.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x];
			}
		}

	}
	return result;
}
int main()
{
	Mat src = imread("C://Users//86173//Desktop//cc.png");
	if (!src.data)
		return -1;
	imshow("src", src);
	int xOffset = 50, yOffset = 80;
	//图像左平移改变大小
	Mat dst1 = imgTranslation2(src, xOffset, yOffset);
	imshow("dst1", dst1);
	waitKey(0);
	return 0;
}

【OpenCV • c++】图像几何变换 | 图像平移_第2张图片

其他

更多专栏订阅推荐:

  • 【开卷数据结构】
  • 【备战蓝桥,冲击省一】
  •    从零开始的 c++ 之旅
  • 【OpenCV • c++】计算机视觉

你可能感兴趣的:(【OpenCV】计算机视觉,opencv,c++,人工智能)