转 OpenCV:remap()简单重映射
来源:互联网 发布:淘宝消费报告数据分析 编辑:程序博客网 时间:2024/05/18 02:07
- 重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。
- 为了完成映射过程, 我们需要获得一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的。
- 一般情况下,我们通过重映射来表达每个像素的位置 (x,y),
像这样 : g(x,y) = f ( h(x,y) )
在这里, g( ) 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数。 - 在OpenCV中,我们用函数remap( )来实现简单重映射。
C++: void remap(InputArray src, //输入图像 OutputArraydst, //输出图像 InputArray map1,//第一个映射 InputArray map2, //第二个映射 int interpolation, //插值 intborderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar() )
第三个参数,InputArray类型的map1,它有两种可能的表示对象:
表示点(x,y)的第一个映射。
表示CV_16SC2 , CV_32FC1 或CV_32FC2类型的X值。第四个参数,InputArray类型的map2,同样,它也有两种可能的表示对象,而且他是根据map1来确定表示那种对象。
若map1表示点(x,y)时。这个参数不代表任何值。
表示CV_16UC1 , CV_32FC1类型的Y值(第二个值)。第五个参数,int类型的interpolation,插值方式,之前的resize( )函数中有讲到,需要注意,resize( )函数中提到的INTER_AREA插值方式在这里是不支持的,所以可选的插值方式如下:
- INTER_NEAREST - 最近邻插值
INTER_LINEAR – 双线性插值(默认值)
INTER_CUBIC – 双三次样条插值(逾4×4像素邻域内的双三次插值)
INTER_LANCZOS4 -Lanczos插值(逾8×8像素邻域的Lanczos插值)
- INTER_NEAREST - 最近邻插值
第六个参数,int类型的borderMode,边界模式,有默认值BORDER_CONSTANT,表示目标图像中“离群点(outliers)”的像素值不会被此函数修改。
第七个参数,const Scalar&类型的borderValue,当有常数边界时使用的值,其有默认值Scalar( ),即默认值为0。
//-----------------------------------【头文件包含部分】---------------------------------------// 描述:包含程序所依赖的头文件//----------------------------------------------------------------------------------------------#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"#include <iostream>//-----------------------------------【命名空间声明部分】--------------------------------------// 描述:包含程序所使用的命名空间//-----------------------------------------------------------------------------------------------using namespace cv;//-----------------------------------【main( )函数】--------------------------------------------// 描述:控制台应用程序的入口函数,我们的程序从这里开始执行//-----------------------------------------------------------------------------------------------int main( ){ //【0】变量定义 MatsrcImage, dstImage; Matmap_x, map_y; //【1】载入原始图 srcImage= imread( "1.jpg", 1 ); if(!srcImage.data) { printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false; } imshow("原始图",srcImage); //【2】创建和原始图一样的效果图,x重映射图,y重映射图 dstImage.create(srcImage.size(), srcImage.type() ); map_x.create(srcImage.size(), CV_32FC1 ); map_y.create(srcImage.size(), CV_32FC1 ); //【3】双层循环,遍历每一个像素点,改变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.cols - i); map_y.at<float>(j,i)= static_cast<float>(j); } } //【4】进行重映射操作 remap(srcImage, dstImage, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0,0,0) ); //【5】显示效果图 imshow("【程序窗口】", dstImage ); waitKey(); return0;}
阅读全文
0 0
- 转 OpenCV:remap()简单重映射
- OpenCV:remap()简单重映射
- opencv中的重映射:remap()函数
- opencv重映射remap( )函数
- 如何使用OpenCV函数 remap 来实现简单重映射
- 如何使用OpenCV函数 remap 来实现简单重映射
- 【opencv练习25 - remap重映射】
- opencv学习(三十四)之重映射remap
- Android Jni opencv中的重映射:remap()函数
- chapter14_4重映射—remap()
- opencv Remap 图像的映射
- 重映射和仿射(remap函数)
- Opencv 中重映射的remap函数中map_x,map_y的困惑说明
- STM32 复用 与 重映射(USART Remap)
- opencv3实现重映射-remap函数
- opencv remap
- STM32 端口复用&重映射(USART Remap)
- STM32 单片机之 串口重映射(USART Remap)
- 设计模式之单例模式
- 编程题目的简单练习
- Java中类的加载顺序详解
- 使用spring-boot-starter-actuator,报错spring-boot-starter-actuator
- 深度学习利器: TensorFlow系统架构及高性能程序设计
- 转 OpenCV:remap()简单重映射
- AVR单片机方向数据寄存器(DDR)与数据寄存器的关系
- 非generic phy的引用计数为0
- minicom的移植
- Ultraedit打开中文乱码解决方案
- 各种基本的排序算法在Object-C实现
- Qt笔记 之 QListWidget控件的使用
- continue 和 return
- less