OpenCV中重映射
OpenCV中图像重映射
重映射的意思是:把一个图像中一个位置的像素放置到另一个图片指定位置的过程。新图像g(x,y)g(x,y)g(x,y)与原图像f(x,y)f(x,y)f(x,y)存在一个映射的关系。
例如:
f(x,y)→g(x,y)f(x,y)\to g(x,y)f(x,y)→g(x,y)
假设对应法则为:h(x,y)=(I.cols−x,y)\color{#f00}h(x,y) = (I.cols-x,y)h(x,y)=(I.cols−x,y)
那么变换后的图像就是原图像的左右反转。从对应法则可以看出,y值是保持不变的,即图像的行保持不变,列逆序排列。
remap(输入图像,输出图像,Mat x方向的映射矩阵Mat y方向的映射矩阵CV_INTER_LINEAR非整数像素坐标的插值标志BORDER_CONSTANT
);
关于两个映射矩阵:
假设原图相为:
[123456789]\begin{bmatrix} 1&2&3\\4&5&6\\7&8&9 \end{bmatrix}⎣⎡147258369⎦⎤
⇓左右反转\Downarrow左右反转⇓左右反转
mapx[321321321]andmapy[000111222]map_x\begin{bmatrix}3&2&1\\3&2&1\\3&2&1\end{bmatrix} and\ map_y \begin{bmatrix}0&0&0\\1&1&1\\2&2&2 \end{bmatrix}mapx⎣⎡333222111⎦⎤and mapy⎣⎡012012012⎦⎤
[123456789]\begin{bmatrix} 1&2&3\\4&5&6\\7&8&9 \end{bmatrix}⎣⎡147258369⎦⎤
⇓上下反转\Downarrow上下反转⇓上下反转
mapx[012012012]andmapy[333222111]map_x\begin{bmatrix}0&1&2\\0&1&2\\0&1&2\end{bmatrix} and\ map_y \begin{bmatrix}3&3&3\\2&2&2\\1&1&1 \end{bmatrix}mapx⎣⎡000111222⎦⎤and mapy⎣⎡321321321⎦⎤
可以对照着代码,体会一下:
#include "opencv2/opencv.hpp"
#include <math.h>using namespace cv;
using namespace std;Mat Remap_hand(const Mat src);
void Remap_api(const Mat src);Mat map_x,map_y;int main(int argc, char *argv[])
{Mat src,dst;src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/day03/dog.jpg");imshow("src",src);map_x.create(src.size(),CV_32FC1);map_y.create(src.size(),CV_32FC1);imshow("hand",Remap_hand(src));while(true){int c = waitKey(1000);//提供一个1000毫秒循环一次的循环cout << "hello" << endl;Remap_api(src);remap(src,dst,map_x,map_y,CV_INTER_LINEAR,BORDER_CONSTANT,Scalar(0,0,0));imshow("api",dst);}return 0;
}Mat Remap_hand(const Mat src)
{Mat temp;src.copyTo(temp);for(int row = 0;row < src.rows;row++){for(int col = 0;col < src.cols;col++){temp.at<Vec3b>(row,col) = src.at<Vec3b>(row,abs(col-src.cols));}}return temp;
}void Remap_api(const Mat src)
{ for(int row = 0;row < src.rows;row++){for(int col = 0;col < src.cols;col++){//左右反转// map_x.at<float>(row,col) = src.cols - col;// map_y.at<float>(row,col) = row;//上下反转//map_x.at<float>(row,col) = col;//map_y.at<float>(row,col) = src.rows - row;//上下左右反转map_x.at<float>(row,col) = src.cols - col;map_y.at<float>(row,col) = src.rows - row;}}
}
OpenCV中重映射相关推荐
- opencv之重映射remap
重映射指把一个图像中的一个位置的像素通过映射关系转换到另一图像的指定位置. 正映射:计算原图像任意像素在映射后图像中的坐标位置. 反映射:计算变换后图像任意像素反映射在原图像中的坐标位置. 通常 由于 ...
- OpenCV图像处理——重映射 remap函数
在<学习OpenCV3,O'Reilly系列丛书>中的第11章常见的图像变换中讲到的"任意映射",Remap函数.函数cv::remap通常用来纠正校准的立体图像,包括 ...
- STM32中重映射的功能和机理
在STM32系列微控制器中,GPIO端口具有多种功能,如输入.输出.模拟输入/输出等.为了提高GPIO的灵活性和可用性,STM32系列微控制器提供了重映射(Remap)功能. 重映射功能允许将一个GP ...
- 【OpenCV】重映射及仿射变换
重映射Remapping void cv::remap ( InputArray src, OutputArray dst,InputArray map1, InputArray map2,int i ...
- 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...
- 【OpenCV 】Remapping 重映射¶
目录 1.1目标 1.2 理论 1.3 代码 1.4 运行结果 1.1目标 展示如何使用OpenCV函数 remap 来实现简单重映射. 1.2 理论 把一个图像中一个位置的像素放置到另一个图片指定位 ...
- OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note 以下原理的说明来自书籍 学习OpenCV ...
- OpenCV探索之路(八):重映射与仿射变换
重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...
- OpenCV学习笔记(十四):重映射:remap( )
OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...
最新文章
- CentOS 6.7编译安装PHP7
- 基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...
- 数据结构题及c语言版4.31答案,数据结构参考题及答案修正版.doc
- DBeaver-调整字体
- java比较常用的缓存技术_常用缓存技术
- 最短路径(状压dp)(ybtoj)
- XLINUX-FPGA开发-基础篇-数电-门电路
- STK 12.5.0发布
- mac10.15切换大小写指示灯不亮
- Auto.js找图找色常用功能
- mt6735 [AT Command] AP下发AT+CLAC命令后 ,手机出现宕机
- 大学生毕业后的档案问题如何处理
- Java修行——DAY12
- 读书笔记--家庭教育1
- 孙溟㠭先生书画艺术《贵妃》
- Laravel+layui实现的通用后台管理系统
- 在markdown中控制文字的颜色,背景色,字体大小,字体样式及颜色RGB转换工具链接
- 51单片机+oled+ds18b20检测并显示温度第三篇:配置温度检测ds18b20
- 获取系统时间戳的方法(使用c,c++,ros)
- mib browser无法接收snmp trap消息解决