opencv-013-图像翻转(Image Flip)

知识点

图像翻转的本质像素映射,OpenCV支持三种图像翻转方式

  • X轴翻转,flipcode = 0
  • Y轴翻转, flipcode = 1
  • XY轴翻转, flipcode = -1

相关的API
flip(src, dst, flipcode)

  • src输入参数
  • dst 翻转后图像
  • flipcode

应用:摄像头拍摄后经常需要翻转

代码(c++,python)

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
27
28
29
30
31
32
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

/*
* 图像翻转
*/
int main() {
Mat src = imread("../images/test.png");
if (src.empty()) {
cout << "could not load image.." << endl;
}
imshow("input", src);

Mat dst;
// X轴 倒影
flip(src, dst, 0);
imshow("x_flip", dst);

// Y轴 镜像
flip(src, dst, 1);
imshow("y_flip", dst);

// XY轴 对角
flip(src, dst, -1);
imshow("xy_flip", dst);

waitKey(0);
return 0;
}
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
27
28
29
30
import cv2 as cv
import numpy as np

src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

# X Flip 倒影
dst1 = cv.flip(src, 0);
cv.imshow("x-flip", dst1);

# Y Flip 镜像
dst2 = cv.flip(src, 1);
cv.imshow("y-flip", dst2);

# XY Flip 对角
dst3 = cv.flip(src, -1);
cv.imshow("xy-flip", dst3);

# custom y-flip
h, w, ch = src.shape
dst = np.zeros(src.shape, src.dtype)
for row in range(h):
for col in range(w):
b, g, r = src[row, col]
dst[row, w - col - 1] = [b, g, r]
cv.imshow("custom-y-flip", dst)

cv.waitKey(0)
cv.destroyAllWindows()

结果

代码地址

github