OpenCV学习笔记(十四):重映射:remap( )
图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后图像任意像素反映射在原图像的坐标位置。
opencv中提供重映射等操作,其中重映射就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。为了完成映射过程,需要获得一些插值为非整数像素的坐标。对于原图像和目标图像,满足下式:
G(x,y)=f(h(x,y))
G()是目标图像,f()是源图像,而h(x,y)是作用于(x,y)的映射方法函数。
1、remap()函数
函数remap使用指定的映射转换源图像,其公式为:
Void remap(InputArray src, // 源图像
OutputArray dst, // 目标图像
InputArray map1, // 第一个映射 ,x坐标
InputArray map2, // 第二个映射 ,y坐标
int interpolation, // 表示插值方法
int borderMode=BORDER_CONSTANT, // 表示边界插值类型
const Scalar&borderValue=Scalar()) // 表示插值数值
map1和map2:代表目标图中的(x,y)点在原图像的x坐标和y坐标;
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
#define WINDOW_NAME "重映射" //为窗口标题定义的宏
Mat g_srcImage, g_dstImage;
Mat g_map_x, g_map_y;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
printf( "\n\t按键操作说明: \n\n"
"\t\t键盘按键【ESC】- 退出程序\n"
"\t\t键盘按键【1】- 第一种映射方式:缩放\n"
"\t\t键盘按键【2】- 第二种映射方式:上下翻转\n"
"\t\t键盘按键【3】- 第三种映射方式:左右翻转\n"
"\t\t键盘按键【4】- 第四种映射方式:上下左右180度翻转\n" );
g_srcImage = imread( "F:/C++/2. OPENCV 3.1.0/TEST/2.jpg", 1 );
if(!g_srcImage.data ) {
printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"