1. 图像的翻转
图像翻转 (Image Flip),图像翻转的本质像素映射,OpenCV 支持三种图像翻转方式:
X轴翻转,flipcode = 0Y轴翻转, flipcode = 1XY轴翻转, flipcode = -1
cv2.flip(src, flipcode) 携带两个参数,第一个是图像在内存中的映射,第二个是翻转码。
import cv2import numpy as npsrc = cv2.imread("./img/003.jpg")cv2.imshow("origin", src)dst1 = cv2.flip(src, 0)cv2.imshow("x-flip", dst1)dst2 = cv2.flip(src, 1)cv2.imshow("y-flip", dst2)dst3 = cv2.flip(src, -1)cv2.imshow("xy-flip", dst3)h, w, ch = src.shapedst = 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]cv2.imshow("custom-y-flip", dst)cv2.waitKey(0)cv2.destroyAllWindows()
效果图
2. 图像的插值
图像插值(Image Interpolation), 最常见四种插值算法
INTER_NEAREST = 0INTER_LINEAR = 1INTER_CUBIC = 2INTER_LANCZOS4 = 4
相关的应用场景有几何变换、透视变换、插值计算新像素,resize, 如果 size 有值,使用 size 做放缩插值,否则根据 fx 与 fy 卷积。
import cv2src = cv2.imread("./img/003.jpg")cv2.imshow("origin", src)h, w = src.shape[:2]print(h, w)dst = cv2.resize(src, (w*2, h*2), fx=0.75, fy=0.75, interpolation=cv2.INTER_NEAREST)cv2.imshow("INTER_NEAREST", dst)dst = cv2.resize(src, (w*2, h*2), interpolation=cv2.INTER_LINEAR)cv2.imshow("INTER_LINEAR", dst)dst = cv2.resize(src, (w*2, h*2), interpolation=cv2.INTER_CUBIC)cv2.imshow("INTER_CUBIC", dst)dst = cv2.resize(src, (w*2, h*2), interpolation=cv2.INTER_LANCZOS4)cv2.imshow("INTER_LANCZOS4", dst)cv2.waitKey(0)cv2.destroyAllWindows()