cv.remap()

函数功能

remap():图像的重映射

函数原型

void cv::remap(InputArray 	src, 
			   OutputArray 	dst,
			   InputArray 	map1, 可以是(x,y)的映射,也可以是单独的X的映射
			   InputArray 	map2, 如果map1为(x,y)的映射则可以为NULL,否则为y的映射
			   int 	        interpolation, // 插值方式
			   int 			borderMode = BORDER_CONSTANT, // 边界填充方式
		       const Scalar & 	borderValue = Scalar() 
)		
Python:
cv.remap(	src, map1, map2, interpolation[, dst[, borderMode[, borderValue]]]	) ->	dst
//dst(x,y)=src(mapx(x,y),mapy(x,y))

实例

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
	Mat mImage = imread("F:\\desktop\\OpenCV_study\\my.jpg", IMREAD_ANYCOLOR);
	namedWindow("The original image", WINDOW_NORMAL);
	imshow("The original image", mImage);
	Mat mResult = mImage.clone();
	//mMapX和mMapY的数据类型必须是  CV_16SC2 ,CV_32FC1, or CV_32FC2.
	Mat mMapX(mImage.rows, mImage.cols, CV_32FC1, Scalar(0));
	Mat mMapY(mImage.rows, mImage.cols, CV_32FC1, Scalar(0));
	int Rows = mImage.rows;
	int Cols = mImage.cols;
	// mapX和mapY是rows行,col列的二维数组
	for (int i = 0; i < Rows; i++)
	{
		float* ptrX = mMapX.ptr<float>(i);
		float* ptrY = mMapY.ptr<float>(i);
		for (int j = 0; j < Cols; j++)
		{
			//左右翻转
			ptrX[j] = (float)(Cols - j);// 每个位置填上对应位置的位置序号
			// ptrX[j] = (float)(Cols - j-1);二者效果相同
			ptrY[j] = (float)i;
			/*********************************************/
			//上下翻转
			//ptrX[j] = (float)j;
			//ptrY[j] = (float)(Rows - i);
			// 缩小一半
			//if (col > (Cols * 0.25) && col <= (Cols*0.75) && row > (Rows*0.25) && Ros <= (src.rows*0.75)) {
			//		ptrX[j]= 2 * (j - (Cols*0.25));
			//		ptrY[i]  = 2 * (i - (Rows*0.25));
			//	}
			//	else {
			//		ptrX[j] = 0;
			//		ptrY[i] = 0;
			//	}
		}
	}
	remap(mImage, mResult, mMapX, mMapY, INTER_LINEAR);//重映射
	namedWindow("The processed image", WINDOW_NORMAL);
	imshow("The processed image", mResult);
	waitKey();
	destroyAllWindows();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值