图像预处理
在计算机视觉和图像处理领域,图像预处理能够提高后续处理(如特征提取、目标检测等)的准确性和效率。
常见的图像预处理操作:
-
图像色彩空间转换
-
图像大小调整
-
图像仿射变换
-
图像翻转
-
图像裁剪
-
图像二值化处理
-
图像去噪
-
边缘检测
-
图像平滑处理
-
图像形态学
图像翻转
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()

最低0.47元/天 解锁文章
1028

被折叠的 条评论
为什么被折叠?



