需求:想把一张图片围绕中心旋转90°、180°等,但是在网上很难找到可以旋转的,尤其是对应的图片宽高进行旋转,很少,即使有也是很笨的方法及for循环行和列对换,因此在查找时
发现一个思路可以解决问题, 如下:
用到2个函数:
transpose(Mat src,Mat &dst); //转置
flip(Mat src,Mat &dst,int nFlag) ; //镜像
Mat src = imread("C:\\Users\\zsffuture\\Pictures\\Saved Pictures\\1.jpg");
Mat temp, dst0, dst1, dst_1;
//先转置一下图片,此时图片是转置并和原图像呈现镜像,因此使用镜像一次
transpose(src, temp);
//使用镜像操作转换过来,第三个参数为1,镜像后相当于原图像的顺时针旋转了90°
flip(temp, dst1, 1);
//第三个参数,0时,镜像后相当于原图逆时针90°
flip(temp, dst0, 0);
//第三个参数为-1时,镜像后相当于旋转180度
flip(temp, dst_1, -1);
imshow("src", src);
imshow("transpose", temp);
imshow("flip:1", dst1);
imshow("flip:0", dst0);
imshow("flip:-1", dst_1);
waitKey();
总结:
需顺时针90°旋转时,transpose(src,tmp) + flip(tmp,dst,1)
需逆时针90°旋转时,transpose(src,tmp) + flip(tmp,dst,0)
需180°旋转时,直接flip(src,dst,-1)