图像像素位置的变化

目录

  • 1. 重映射
  • 2. 仿射变换

1. 重映射

void remap(InputArray src,
 		   OutputArray dst, 
		   InputArray map1, 
		   InputArray map2,
		   int interpolation, 
		   int borderMode = BOREDER_CONSTANT, 
		   const Scalar& borderValue = Scalar());

参数详解:

  • 第一个参数:输入图像。需为单通道8位或者浮点型图像。
  • 第二个参数:输出图像。需和输入图像有一样的尺寸和类型。
  • 第三个参数:对应原图像的x坐标。
  • 第四个参数:对应原图像的y坐标。
  • 第五个参数:插值方式。
  • 第六个参数:边界模式。默认值BORDER_CONSTANT。
  • 第七个参数:当有常数边界时使用的值。默认为0。

程序示例

#include 

using namespace cv;

int main()
{
     
	Mat srcImage = imread("D:\\visual studio 2010\\Projects\\remap\\1.jpg");
	Mat dstImage,map_x,map_y;
	imshow("",srcImage);
	//创建和原始图像一样的效果图,x重映射图,y重映射图
	dstImage.create(srcImage.size(),srcImage.type());
	map_x.create(srcImage.size(),CV_32FC1);
	map_y.create(srcImage.size(),CV_32FC1);
	//双层循环,遍历每一个像素点,改变map_x和map_y的值
	for(int j=0;j<srcImage.rows;j++)
	{
     
		for(int i=0;i<srcImage.cols ;i++)
		{
     
			//改变map_x和map_y的值
			map_x.at<float>(j,i) = static_cast<float>(srcImage.rows -i);
			map_y.at<float>(j,i) = static_cast<float>( srcImage.rows-j);
		}
	}
	//进行重映射操作
	remap(srcImage,dstImage,map_x,map_y,CV_INTER_LINEAR,BORDER_CONSTANT,Scalar(255,0,0));
    //显示效果图
	imshow("效果图",dstImage);
	waitKey(0);
	return 0;
 
}

2. 仿射变换

void wrapAffine(InputArray src,
 			    OutputArray dst, 
		 	    InputArray M, 
			    Size dsize,
			    int flags = INTER_LINEAR, 
			    int borderMode = BOREDER_CONSTANT, 
			    const Scalar& borderValue = Scalar());

参数详解:

  • 第一个参数:输入图像。
  • 第二个参数:输出图像。和输入图像有相同的尺寸和类型。
  • 第三个参数:2 x 3 的变换矩阵。
  • 第四个参数:输出图像的尺寸。
  • 第五个参数:插值方法的标识符。默认值INTTER_LINER。
  • 第六个参数:边界像素模式。默认值BORDER_CONSTANT。
  • 第七个参数:恒定的边界情况下取的值。默认为0。
插值方式标识符 含义
INTER_NEAREST 最近邻插值
INTER_LINEAR 线性插值
INTER_AREA 区域插值
INTER_CUBIC 三次样条插值
INTER_LANCZOS4 Lanczos插值
CV_WARP_FILL_OUTLIERS
CV_WARP_INVERSE_MAP
Mat getRotationMatrix2D(Point2f center, 
						double angele, 
						double scale)

参数详解:

  • 第一个参数:
  • 第二个参数:
  • 第三个参数:

代码示例

图像像素位置的变化_第1张图片
图像像素位置的变化_第2张图片
图像像素位置的变化_第3张图片

你可能感兴趣的:(#,Opencv)