微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
几何变换
几何变换包括旋转、缩放、平移等基本操作。OpenCV提供了多种函数来实现这些变换
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 获取图像中心、旋转角度和缩放因子
rows, cols = img.shape[:2]
center = (cols / 2, rows / 2)
angle = 45 # 旋转角度
scale = 1 # 缩放因子
# 获取旋转矩阵
M = cv2.getRotationMatrix2D(center, angle, scale)
# 应用旋转变换
dst = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('Original Image', img)
cv2.imshow('Rotated Image', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
透视变换
透视变换是一种将二维图像投影到一个新的平面上的变换方法。它可以用来校正图像中的透视畸变,例如从不同角度拍摄的图片
定义输入和输出点:
选择图像上的四个点和它们在目标平面上的对应位置。
获取变换矩阵:
使用 cv2.getPerspectiveTransform 函数获取透视变换矩阵。
应用变换:
使用 cv2.warpPerspective 函数应用变换。
代码演示如下:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 定义四个点及其对应位置
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
# 获取透视变换矩阵
M = cv2.getPerspectiveTransform(pts1, pts2)
# 应用透视变换
dst = cv2.warpPerspective(img, M, (300,300))
cv2.imshow('Original Image', img)
cv2.imshow('Transformed Image', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
极坐标变换
极坐标变换将图像从笛卡尔坐标系转换为极坐标系,或者反之。这在处理具有圆形对称性的图像时非常有用。
import cv2
import numpy as np
# 读取图像
img = cv2.imread('D:/polar_test.bmp', cv2.IMREAD_GRAYSCALE)
# 获取图像中心和半径
rows, cols = img.shape
center = (cols // 2, rows // 2)
maxRadius = max(cols // 2, rows // 2)
dst = cv2.warpPolar(img, None, center, maxRadius, flags = cv2.INTER_LINEAR | cv2.WARP_FILL_OUTLIERS)
cv2.imshow('Original Image', img)
cv2.imshow('Polar Image', dst)
cv2.imwrite("D:/result.jpg", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
推荐阅读
OpenCV4.8+YOLOv8对象检测C++推理演示
ZXING+OpenCV打造开源条码检测应用
总结 | OpenCV4 Mat操作全接触
三行代码实现 TensorRT8.6 C++ 深度学习模型部署
实战 | YOLOv8+OpenCV 实现DM码定位检测与解析
对象检测边界框损失 – 从IOU到ProbIOU
YOLOv8 OBB实现自定义旋转对象检测
初学者必看 | 学习深度学习的五个误区
YOLOv8自定义数据集训练实现安全帽检测