OpenCV:重映射remap vs仿射变换warpAffine

绪:
重映射就是把一幅图像中某个位置的像素放置到另一个图像中指定位置的过程;
仿射变换是一个标的目的量空间进行一次线性变换并接上一个平移 , 变换为另一贯量空间的过程;
本文本家儿要分重映射和放射变换的功能;
以及若何利用的 。

OpenCV:重映射remap vs仿射变换warpAffine

文章插图

需要这些哦
OpenCV 2410
方式/
1重映射remap:
重映射就是把一幅图像中某个位置的像素放置到另一个图像中指定位置的过程;
公式:
g(x,y)=f(h(x,y))
此中f就是映射体例;
在OpenCV中 , 利用remap函数实现重映射 。
格局:
void remap(InputArray src, //输入图像
           OutputArraydst, //输出图像
           InputArray map1,//第一个映射
           InputArray map2, //第二个映射
           int interpolation, //插值
           intborderMode=BORDER_CONSTANT,
           const Scalar& borderValue=https://vvvtt.com/article/Scalar()
           )

OpenCV:重映射remap vs仿射变换warpAffine

文章插图

2重映射法式如下:
//根基重映射尝试
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
using namespace std; 
using namespace cv; 
int main()
{
       Mat srcImage = imread("0.jpg");
       imshow("Src Pic", srcImage);
       Mat dstImage, map_x, map_y;
       dstImage.create(srcImage.size(), srcImage.type());
       map_x.create(srcImage.size(), CV_32FC1);
       map_y.create(srcImage.size(), CV_32FC1);
       //遍历每一个像素点 , 改变map_x & map_y的值,实现翻转180度
       for (int j = 0; j < srcImage.rows; j++)
       {
              for (int i = 0; i < srcImage.cols; i++)
              {
                     map_x.at<float>(j, i) = static_cast<float>(i);//行不变
                     map_y.at<float>(j, i) = static_cast<float>(srcImage.rows - j);//列翻转
              }
       }
       //进行重映射操作
       remap(srcImage, dstImage, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));
       imshow("重映射结果图", dstImage); 
       waitKey();

推荐阅读