有关opencv的学习(5)—图像的重映射
2017-03-04 22:14
267 查看
在之前的操作中,如加入椒盐噪声或是对图像进行锐化操作,都读取和修改了图像的像素值。图像的重映射是通过移动像素修改图像的外观。这个过程不会修改图像值,而是把每个像素的位置重新映射到新的位置。可以用来创建图像特效,或者修正因镜片等原因导致的图像扭曲。
使用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);
}
结果显示如下:
原始图片如下所示:
使用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);
}
结果显示如下:
原始图片如下所示:
相关文章推荐
- 有关opencv的学习(4)—图像的锐化
- 有关opencv的学习(15)—图像的膨胀和腐蚀(1)
- 有关opencv的学习(6)—图像的HSV色彩空间
- 有关opencv的学习(13)—使用固定阈值处理图像
- 有关opencv的学习(18)—图像的分水岭算法实现
- 有关opencv的学习(2)—在图像中加入椒盐噪声
- 有关opencv的学习(14)—使用自适应阈值处理图像
- opencv3学习之图像的翻转--重映射
- OPENCV学习笔记2-7_图像重映射
- 有关opencv的学习(20)—图像滤波(1)
- 有关opencv的学习(16)—图像的膨胀和腐蚀(2)
- 有关opencv的学习(9)—计算图像直方图
- 有关opencv的学习(3)—图像的减色算法
- 基础学习笔记之opencv(19):有关图像序列的直方图计算
- Halcon学习之三:有关图像通道的函数
- Halcon学习之五:有关图像的定义域的函数
- opencv [c++版] 学习笔记(1) 显示图像及播放视频
- 有关OpenCV中图像深度的问题,期待有人回答
- openCV学习笔记(5)-- 图像形态学
- 图像添加噪声【OpenCV学习笔记1】