首页 > 学院 > 开发设计 > 正文

有关opencv的学习(5)—图像的重映射

2019-11-06 07:27:17
字体:
来源:转载
供稿:网友

在之前的操作中,如加入椒盐噪声或是对图像进行锐化操作,都读取和修改了图像的像素值。图像的重映射是通过移动像素修改图像的外观。这个过程不会修改图像值,而是把每个像素的位置重新映射到新的位置。可以用来创建图像特效,或者修正因镜片等原因导致的图像扭曲。

使用OPENCV的remap函数,首先,定义在重映射处理中使用的映射参数,然后把映射参数应用到输入图像。以下定义一个转换函数,在图像上创建波浪形的效果。

代码如下:

#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;//重映射图像,创建波浪形效果void wave(const Mat &image,Mat &result){    //映射参数    Mat srcX(image.rows,image.cols,CV_32F);//x方向    Mat srcY(image.rows,image.cols,CV_32F);//y方向        //创建映射参数    for(int i=0;i<image.rows;i++)    {        for(int j=0;j<image.cols;j++)        {            //(i,j)像素的新位置            srcX.at<float>(i,j)=j;//            //原来在第j行的元素,现在根据一个正弦曲线移动            srcY.at<float>(i,j)=i+4*sin(j/10.0);        }            }    //应用映射参数    remap(image, result, srcX, srcY, INTER_LINEAR);}int main( ){    Mat image=imread("/Users/zhangxiaoyu/Desktop/2.png");    if(image.empty())  {     cout<<"Error!cannot be read...../n";     return -1;    }        Mat result;    wave(image, result);    namedWindow("result");    imshow("result", result);    waitKey(0);    }结果显示如下:

原始图片如下所示:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表