2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > opencv 重映射 x轴翻转 y轴翻转 xy轴镜像 图像缩小

opencv 重映射 x轴翻转 y轴翻转 xy轴镜像 图像缩小

时间:2024-07-01 13:34:21

相关推荐

opencv 重映射 x轴翻转 y轴翻转 xy轴镜像 图像缩小

本章内容

重映射、x轴翻转,y轴翻转,xy轴镜像,图像缩小

输出结果:

源码

#include <ostream>

#include <opencv.hpp>

#include <math.h>

int main(int argc, char *argv[])

{

/*

本章内容:

重映射Reamap

*/

cv::String fileName = "/home/wang/dev/Image/biuld.jpeg";

cv::String fileName1 = "/home/wang/dev/Image/pingpang.jpeg";

cv::Mat src = cv::imread(fileName);

cv::Mat src2 = cv::imread(fileName1);

if(src.data == NULL){

printf("图像读入失败\n");

return -1;

}

/*重映射

* api接口:CV_EXPORTS_W void remap( InputArray src, OutputArray dst,

InputArray map1, InputArray map2,

int interpolation, int borderMode = BORDER_CONSTANT,

const Scalar& borderValue = Scalar());

@param map1 x轴映射

@param map2 y轴映射

@param interpolation Interpolation method (see #InterpolationFlags).

enum InterpolationFlags {

INTER_NEAREST = 0,

INTER_LINEAR = 1,

INTER_CUBIC = 2,

}

*/

cv::Mat mapX(src.rows,src.cols,CV_32FC1);

cv::Mat mapY(src.rows,src.cols,CV_32FC1);

cv::String winName = "";

for(int i=0; i < src.rows;i++){

for(int j=0; j <src.cols;j++){

switch(0){

case 0:

winName="关于x轴翻转";

mapX.at<float>(i,j) = src.cols - j; //关于x轴翻转

mapY.at<float>(i,j) =i;

break;

case 1: // 关于y轴翻转

winName="关于y轴翻转";

mapX.at<float>(i,j) = j;

mapY.at<float>(i,j) =src.rows - i ;

break;

case 2: // 关于x,y翻转

winName="关于x,y翻转";

mapX.at<float>(i,j) = src.cols - j;

mapY.at<float>(i,j) =src.rows - i ;

break;

case 3: // 缩小并平移

winName="缩小并平移";

mapX.at<float>(i,j) = j*2 - src.cols/4;

mapY.at<float>(i,j) = i*2 - src.rows/4;

break;

}

}

}

cv::Mat dstX;

cv::remap(src,dstX,mapX,mapY,cv::INTER_LINEAR);

cv::imshow("src",src);

cv::imshow(winName,dstX);

cv::waitKey(0);

return 1;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。