OpenCV图像翻转

https://blog.csdn.net/Kelvin_Yan/article/details/49755313

矩阵(图像)镜像(翻转)


cv::flip

[cpp]  view plain  copy
  1. void flip(InputArray src, OutputArray dst, int flipCode)  

参数:

src,输入矩阵

dst,翻转后矩阵,类型与src一致

flipCode,翻转模式,flipCode==0垂直翻转(沿X轴翻转),flipCode>0水平翻转(沿Y轴翻转),flipCode<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)


实例:https://blog.csdn.net/wangzhebupt/article/details/18042823

环境:OPENCV2.4.6+VS2012

算法:

将摄入图像的左半边进行翻转,同时根据喜剧效果,将未翻转和翻转的图像合成到一副图像上


想法来源:


WIN32:


源图像


翻转图像


效果图


[cpp]  view plain  copy
  1. #include <opencv2/core/core.hpp>  
  2. #include <opencv2/highgui/highgui.hpp>  
  3.   
  4. /*int main(){ 
  5.     cv::Mat image=cv::imread("1.jpg"); 
  6.     cv::namedWindow("My Image"); 
  7.     cv::imshow("My image",image); 
  8.     cv::waitKey(5000); 
  9.  
  10.     return 1; 
  11. }*/  
  12.   
  13.   
  14.   
  15. //demo 2  
  16. //如果此处加了 using namespace cv,那么则下面不用cv::  
  17. #include <iostream>  
  18. using namespace std;  
  19. int main()  
  20. {  
  21.   
  22.   
  23.     ///////////////////////////////////////////////////////////////////////////  
  24.     //demo1   图像翻转加权重相加  
  25.     /////////////////////////////////////////////////////////////////////////////  
  26.       
  27.     //cv::Mat image;  
  28.     //std::cout<<"size,"<<image.size().height<<","  
  29.     //  <<image.size().width<<std::endl;  
  30.     //image= cv::imread("1.jpg");  
  31.     //if(!image.data)  
  32.     //{  
  33.     //  cout<<"image does not exist"<<endl;  
  34.     //}  
  35.     //cv::namedWindow("Original Image");//定义窗口  
  36.     //cv::imshow("Original Image",image);//显示图像  
  37.     //cv::Mat result;  
  38.     //cv::flip(image,result,1);//整理表示水平翻转,0表示垂直翻转,负数表示既有水平也有垂直翻转  
  39.     //cv::namedWindow("Output Image");  
  40.     //cv::imshow("Output Image", result);  
  41.   
  42.     //cv::addWeighted(image,0.8,result,0.8,0,image);  
  43.     //cv::namedWindow("combine");  
  44.     //cv::imshow("combine", image);  
  45.   
  46.   
  47.     ///////////////////////////////////////////////////////////////////////////////  
  48.     ////demo2  暂时只有水平翻转,然后进行动态的合并,第一步先是静态合并  
  49.     //////////////////////////////////////////////////////////////////////////////  
  50.       
  51.     float x,y;  
  52.   
  53.     cv::Mat image;  
  54.     /*std::cout<<"size,"<<image.size().height<<"," 
  55.         <<image.size().width<<std::endl;*/  
  56.     image= cv::imread("1.jpg");  
  57.     if(!image.data)  
  58.     {  
  59.         cout<<"image does not exist"<<endl;  
  60.     }  
  61.     cv::namedWindow("Original Image");//定义窗口  
  62.     cv::imshow("Original Image",image);//显示图像  
  63.       
  64.       
  65.       
  66.   
  67.     cv::Mat result;  
  68.     cv::flip(image,result,1);//整理表示水平翻转,0表示垂直翻转,负数表示既有水平也有垂直翻转  
  69.     cv::namedWindow("Output Image");  
  70.     cv::imshow("Output Image", result);  
  71.   
  72.     /*cv::addWeighted(image,0.8,result,0.8,0,image); 
  73.     cv::namedWindow("combine"); 
  74.     cv::imshow("combine", image);*/  
  75.       
  76.     cout<<"请输入x的位置" "x的位置范围为0到"<<image.cols-1<<endl;  
  77.     cin>>x;  
  78.     ////防止溢出  
  79.     /*if((x>=0)&&(x<=image.cols)) 
  80.         x=x; 
  81.     else if(x<0) 
  82.         x=0; 
  83.     else  x=image.cols;*/  
  84.   
  85.     //y=image.rows;  
  86.       
  87.     // 我觉得这个地方的cvcreatemat函数用的不对,应该是创建一个mat,这里创建了cvmat  
  88.     //cv::Mat combine=cvCreateMat(3*image.cols,2*image.rows,3);  
  89.     //cv::Mat combine=cvCreateMat(2*image.cols,image.rows,CV_32FC1);  
  90.   
  91.     //定义动态combine  
  92.   
  93.     //cv::Mat combine = cv::Mat::zeros(image.rows,2*image.cols,image.type());  
  94.     cv::Mat combine = cv::Mat::zeros(image.rows,2*x,image.type());  
  95.     // define ROI  
  96.     cv::Mat imageROI1= combine(cv::Rect(0,0,x,image.rows));  
  97.     cv::Mat imageROI2= combine(cv::Rect(x,0,x,image.rows));  
  98.       
  99.     //////DEBUG  
  100.     //std::cout<<combine.cols<<" "<<combine.rows<<endl;   
  101.       
  102.     //combine.copyTo(image(x,y,3))  
  103.     //cv::Mat combine(image,cv::Rect(0,0,x+1,y));  
  104.     //combine(cv::Rect(0,0,image.cols,image.rows)) = image;  
  105.   
  106.     //原来的copy凡是  
  107.     //imageROI2=result;  
  108.     image(cv::Rect( 0, 0, x, image.rows)).copyTo(imageROI1);  
  109.       
  110.     result(cv::Rect( image.cols-x, 0, x, image.rows)).copyTo(imageROI2);  
  111.   
  112.     //////通过看到数值来验证是否是这个地方出错  
  113.     //std::cout<<combine(cv::Rect(0, 0, 3, 3))<<std::endl;  
  114.     cv::namedWindow("Combined Image");  
  115.     cv::imshow("Combined Image", combine);  
  116.       
  117.       
  118.       
  119.     cv::waitKey(0);  
  120.     //cv::imwrite("2.jpg",result);  
  121. }  

猜你喜欢

转载自blog.csdn.net/qq_34793133/article/details/80388644