OpenCV图像像素映射
一、概述
案例:实现一个图片左右翻转(照镜子),上下翻转(倒立)的效果
映射函数介绍:
Remap( InputArray src,// 输入图像 OutputArray dst,// 输出图像 InputArray map1,// x 用于存放图像X方向的映射关系,类型必须是CV_32FC1的。 InputArray map2,// y 用于存放图像Y方向的映射关系,类型必须是CV_32FC1的。 int interpolation,// 选择的插值方法,常见线性插值,可选择立方等 int borderMode,// BORDER_REPLICATE:重复、BORDER_REFLECT:反射、BORDER_REFLECT_101:反射101、BORDER_WRAP:外包装、BORDER_CONSTANT:常量复制 const Scalar borderValue// color )
实现步骤:
1.加载原图
2.获取x方向的映射、y反向的映射
3.调用remap函数传入参数实现映射
4.输出映射后的图像
二、代码示例
Mat src = imread(filePath); if(src.empty()){ return; } imshow("src",src); Mat dst,map_x,map_y; map_x.create(src.size(),CV_32FC1); map_y.create(src.size(),CV_32FC1); for(int i=0;i<src.rows;i++){ float *ptrX = map_x.ptr<float>(i);//获取一列像素 float *ptrY = map_y.ptr<float>(i); for(int j=0;j<src.cols;j++){ // //左右像素对调,其实就是把坐标给互换掉 // ptrX[j] = (float)(src.cols-j); // ptrY[j] = (float)i; //上下对调 ptrX[j] = (float)j; ptrY[j] = (float)(src.rows-i); } } remap(src,dst,map_x,map_y,BORDER_CONSTANT); imshow("remap",dst);
三、效果展示
1.上下翻转效果图

2.左右互换效果图

浙公网安备 33010602011771号