cv::Mat的翻转: 1 水平 0 垂直 -1 兼有水平 垂直 和转置

void main()
{
    Mat m1 = imread("E:\\learnProg\\OpenCV\\OpenCV2ComputerVisionApplicationProgrammingCookbook\\images\\lake.jpg");  
    Mat m2;  
     Mat m2_1; 
      Mat m2_2; 
    Mat m3;  
    flip(m1, m2, 1);  
     flip(m1, m2_1, 0); 
      flip(m1, m2_2, -1); 
    transpose(m1, m3);  
  
    namedWindow("src", 1);   
    imshow("src", m1);
    waitKey(0);

    // drawing the results
    namedWindow("m2 1", 1);   
    imshow("m2 1", m2); waitKey(0);
    namedWindow("m2_1 0", 1);   
    imshow("m2_1 0", m2_1); waitKey(0);

    namedWindow("m2_2 -1", 1);   
    imshow("m2_2 -1", m2_2); waitKey(0);

    namedWindow("m3", 1);   
    imshow("m3", m3);
    waitKey(0);

}

cv::Mat的翻转和转置

原创 2017年02月14日 22:08:05

cv::Mat的本质是矩阵。openCV对Mat类型的处理,实际上也是矩阵操作。这里给个小例子,介绍转置操作和翻转操作。这段代码受了

http://www.tuicool.com/articles/emIr2u

的启发。

原图:

 

[cpp] view plain copy
 
  1. Mat m1 = imread("E:\\lena.jpg");  
  2.     Mat m2;  
  3.     Mat m3;  
  4.     flip(m1, m2, 1);  
  5.     transpose(m1, m3);  
  6.   
  7.     imwrite("E:\\flip.jpg", m2);  
  8.     imwrite("E:\\transpose.jpg", m3);  

翻转操作的结果:

 

转置的结果:

注意,转置的结果不同于旋转。比方说矩阵:

转置后的结果是

若要实现M1的90度旋转,还要让M2绕第二列翻转。

同理,要旋转一个Mat格式的图像,也要经过Transpose和 flip两道操作才能完成。

http://blog.csdn.net/liji_digital/article/details/55107161
 
posted @ 2018-03-21 14:59  sky20080101  阅读(396)  评论(0)    收藏  举报