OpenCV flip transpose 實現圖像旋轉90°、180°、270°
AlanWang4523 2019-09-10 20:34:25 1479 收藏 5
分類專欄: 原創 OpenCV 圖像處理
版權
在做圖像處理時,需用做圖像旋轉 90°、180°、270° 的操作,OpenCV 中可通過 cv::flip 和 cv::transpose 來配合實現(注意:這倆函數只能實現 90°、180°、270° 的旋轉,無法實現任意角度,任意角度可使用 warpAffine);
flip 函數原型:
/**
* 實現圖像的翻轉
* @param src 輸入的源圖像
* @param dst 輸出的目標圖像
* @param flipCode 翻轉碼,
* 0 : 表示沿 X 軸翻轉
* > 0 : 如 1,表示沿 Y 軸翻轉,
* < 0 : 如 -1,表示既沿 X 軸翻轉,又沿 Y 軸翻轉,等價於旋轉180°
* @return
*/
void flip(InputArray src, OutputArray dst, int flipCode);
1
2
3
4
5
6
7
8
9
10
11
transpose 函數原型:
/**
* 轉置,相當於沿對角線翻轉
* @param src 輸入的源圖像
* @param dst 輸出的目標圖像
* @return
*/
void transpose(InputArray src, OutputArray dst);
1
2
3
4
5
6
7
90°、180°、270° 旋轉的實現:
/**
* degree 只能是 90°、180°、270°
* 該角度為順時針方向,如果想逆時針旋轉,將下面的 90° 和 270° 的實現交換即可
* @param src_img
* @param degree
* @return
*/
cv::Mat rotateImage(cv::Mat& src_img, int degree) {
if (degree == 90) {
cv::Mat srcCopy = cv::Mat(src_img.rows, src_img.cols, src_img.depth());
cv::transpose(src_img, srcCopy);
cv::flip(srcCopy, srcCopy, 1);
return srcCopy;
} else if (degree == 180) {
cv::Mat srcCopy = cv::Mat(src_img.rows, src_img.cols, src_img.depth());
cv::flip(src_img, srcCopy, -1);
return srcCopy;
} else if (degree == 270) {
cv::Mat srcCopy = cv::Mat(src_img.rows, src_img.cols, src_img.depth());
cv::transpose(src_img, srcCopy);
cv::flip(srcCopy, srcCopy, 0);
return srcCopy;
} else {
return src_img;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
測試代碼:
void testRotateByOpenCVFlip() {
std::string pic_path = "./1.jpg";
cv::Mat image = cv::imread(pic_path.c_str(), cv::IMREAD_COLOR);
cv::imshow("src_img", image);
cv::Mat rotateImg = rotateImage(image, 90);
cv::imshow("dst_img", rotateImg);
cv::waitKey(0);
cv::destroyAllWindows();
}
1
2
3
4
5
6
7
8
9
10
11
12
分別旋轉90°、180°、270° 效果如下:
————————————————
版權聲明:本文為CSDN博主「AlanWang4523」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011520181/article/details/100710268
