图像预处理
在计算机视觉和图像处理领域,图像预处理能够提高后续处理(如特征提取、目标检测等)的准确性和效率。
常见的图像预处理操作:
-
图像色彩空间转换
-
图像大小调整
-
图像仿射变换
-
图像翻转
-
图像裁剪
-
图像二值化处理
-
图像去噪
-
边缘检测
-
图像平滑处理
-
图像形态学
图像翻转
cv2.flip
是 OpenCV 库中的一个函数,用于翻转图像。翻转可以是水平翻转、垂直翻转或同时水平和垂直翻转。这个函数接受两个参数:要翻转的图像和一个指定翻转类型的标志。
函数签名
cv2.flip(src, flipCode[, dst]) -> dst
参数说明
-
src:输入图像,可以是任意类型和深度的多通道图像。
-
flipCode
:指定翻转类型的整数标志:
-
0
:沿 X 轴翻转(垂直翻转) -
1
:沿 Y 轴翻转(水平翻转) -
-1
:沿 X 轴和 Y 轴翻转(同时水平和垂直翻转)
-
-
dst:可选参数,输出图像。如果未提供,输出图像将与输入图像具有相同的尺寸和类型。
示例
以下是一些使用 cv2.flip
的示例代码:
import cv2 # 加载图像 image = cv2.imread("save_image/car.png") # 翻转: -1:水平和垂直 1:水平翻转,0 垂直翻转 img = cv2.flip(image, -1) # 显示原始图像和翻转后的图像 cv2.imshow('img', img) # 等待按键并关闭窗口 cv2.waitKey(0) cv2.destroyAllWindows()
import cv2
img=cv2.imread("image/car.png")
#翻转:0:垂直翻转;1:水平翻转;-1是水平垂直翻转
f_img=cv2.flip(img,-1)
cv2.imshow("old",img)
cv2.imshow("new",f_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像仿射变换
仿射变换(Affine Transformation)是一种线性变换,它保持了点之间的相对距离不变,即平行线在变换后仍然保持平行。在图像处理中,仿射变换常用于旋转、缩放、平移和剪切等操作。
图像旋转
旋转操作可以将图像绕着某个点旋转一定的角度
实例代码
import cv2 # 加载图像 image = cv2.imread("images/car.png") # 获取图像的尺寸 (h, w) = image.shape[:2] # 设置旋转中心和旋转角度 center = (w // 2, h // 2) # 计算旋转矩阵 # 旋转角度(可修改) angle = 40 # 缩放比例 1.0 表示不缩放 M = cv2.getRotationMatrix2D(center, angle, 1.0) # 进行旋转 rotated_image = cv2.warpAffine(image, M, (w, h)) cv2.imshow('Rotated Image', rotated_image) # 等待按键并关闭窗口 cv2.waitKey(0) cv2.destroyAllWindows()
cv2.getRotationMatrix2D
是 OpenCV 库中的一个函数,用于获取旋转矩阵。这个函数主要用于图像的旋转变换。旋转矩阵是一个 2x3 的矩阵,可以用来将图像围绕指定的中心点旋转指定的角度,并且可以选择是否进行缩放。
函数签名
cv2.getRotationMatrix2D(center, angle, scale) -> M
参数说明
-
center:旋转中心点的坐标,格式为
(x, y)
。 -
angle:旋转角度,单位为度。正角度表示逆时针旋转,负角度表示顺时针旋转。
-
scale:缩放比例。如果设置为 1,则不进行缩放。
返回值
-
M:2x3 的旋转矩阵。
示例
以下是一个使用 cv2.getRotationMatrix2D
的示例代码,
cv2.warpAffine 函数
仿射变换 函数
cv2.warpAffine(src, M, dsize, dst) →
-
src: 输入图像。
-
M: 2x3 的变换矩阵,类型为
np.float32
。 -
dsize: 输出图像的尺寸,形式为
(width, height)
。 -
dst (可选): 输出图像。如果未提供,则会自动创建一个新的图像。
import cv2
img=cv2.imread("image/car.png")
#获取图片的像素
(h,w)=img.shape[:2]
#旋转的坐标
center=(100,120)
#旋转的角度
du=30
#获取图像矩阵
m=cv2.getRotationMatrix2D(center,du,1)#1:保留不变;>1放大;<1缩小
#图像旋转
w_img=cv2.warpAffine(img,m,(w,h))
cv2.imshow("image",w_img)
cv2.waitKey(0)
cv2.destroyAllWindows()