这里写目录标题
一. 图像几何变换
1. 更改颜色空间
1.1 获取Opencv所有颜色空间
使用dir()函数获取cv模块的所有属性和方法
i.startswith('COLOR_') 检查i是否以'COLOR_'开头
flags = [i for i in dir(cv) if i.startswith('COLOR_')]
1.2 更改图片颜色空间
cv.cvtColor(src, code[, dst[, dstCn]])
参数:
src:输入图像,即要转换颜色空间的原始图像
code:颜色空间转换码,用于指定转换的目标颜色空间
dst(可选):
输出图像,即转换后的颜色空间图像
如果省略此参数,则会自动创建一个与源图像大小相同的新图像
dstCn(可选):
输出图像的通道数
如果省略此参数,则会根据目标颜色空间自动确定通道数
1.2.1 HSV颜色空间
可以通过HSV颜色空间的转换,获取某个颜色
2. 更改图像大小
cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
参数:
src:输入图像,即要调整大小的原始图像
dsize:
输出图像的大小,以(宽度, 高度)的形式表示
如果只提供了一个值,则图像将被调整为正方形
dst(可选):
输出图像,即调整大小后的图像
如果省略此参数,则会自动创建一个新图像
fx(可选):
水平方向上的缩放因子
如果省略此参数,则会根据dsize自动计算
fy(可选):
垂直方向上的缩放因子
如果省略此参数,则会根据dsize自动计算
interpolation(可选):插值方法,用于指定图像缩放时的插值算法
3. cv.warpAffine ( ) 仿射变换
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
参数:
src:输入图像
M:变换矩阵,通常是2x3的浮点型数组,表示仿射变换的系数
dsize:输出图像的大小,以宽和高的形式指定(宽度,高度)
dst:(可选)输出图像的缓冲区
flags:(可选)插值方法的标志
borderMode:(可选)像素外推法选择标志
borderValue:(可选)当borderMode使用cv2.BORDER_CONSTANT时,此参数表示边框的颜色
3.1 用M矩阵进行图像的仿射变换:
M矩阵创建方式:直接创建
创建float32的ndarray数组
M矩阵创建方式:cv.Mat getRotationMatrix2D ( )
cv.Mat getRotationMatrix2D(Point2f center, double angle, double scale)
参数:
center:旋转的中心点坐标
double angle:旋转的角度,单位是度;为负数表示顺时针选择
double scale:表示图像的缩放因子
解释 scale:
OpenCV在执行仿射变换时会自动填充边界外的像素,以保持输出图像尺寸与输入图像一致
默认情况下,边界外的区域会被填充为0
提供了borderValue参数时,会使用该颜色值进行填充
因此,经过cv.Mat getRotationMatrix2D ( )创建的M矩阵变换后的图像,shape并不会改变
M矩阵创建方式:cv2.rotate ( )
cv2.rotate(img, rotateCode[, dst])
参数:
img:表示要旋转的图像,通常是一个numpy数组
rotateCode:
整数参数,指定了旋转的方式它可以是以下值之一:
cv2.ROTATE_90_CLOCKWISE:顺时针旋转90度
cv2.ROTATE_180:旋转180度
cv2.ROTATE_90_COUNTERCLOCKWISE:逆时针旋转90度
cv2.ROTATE_90_CLOCKWISE:顺时针旋转270度
dst:可选参数
表示旋转后的图像存放的目标数组
如果不提供,则会创建一个新的数组来存放结果
注意:
图像的尺寸可能会改变,因为旋转后的图像可能需要更多的空间来适应旋转后的图像内容
如果需要保持原始图像的尺寸,可以考虑使用cv.warpAffine()结合cv.getRotationMatrix2D()来实现旋转,并通过适当的边界填充来保持图像尺寸不变
M矩阵创建方式:cv.flip( )
cv.flip(cv::InputArray src, cv::OutputArray dst, int flipCode = 0)
参数:
src:输入图像,即需要进行翻转操作的原始图像
dst:输出图像,即存放翻转后结果的目标图像
flipCode:
翻转模式,该参数决定了翻转的方式:
>0:沿y-轴翻转,即上下翻转
0:沿x-轴翻转,即左右翻转
<0:同时沿x和y轴翻转
3.2 任意的给定三对点来构建仿射变换
M矩阵创建方式:cv.getAffineTransform ( )
pts1 = np.float32([[xx,xx], [xxx,xxx], [xxx,xxx]])
pts2 = np.float32([[xx,xx], [xxx,xxx], [xxx,xxx]])
# 构建M
M = cv.getAffineTransform(pts1, pts2)
4. cv.warpPerspective ( ) 透视转换
dst = cv.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
参数:
src:输入图像,即需要进行透视变换的原始图像
M:透视变换矩阵
dsize:输出图像的大小,以宽度和高度的形式给出,例如(width, height)
dst:
输出图像,即变换后的图像
如果未提供,则会创建一个新的图像
flags:插值方法的标志
borderMode:像素外推法的选择标志,默认值为cv.BORDER_CONSTANT
borderValue:当使用cv.BORDER_CONSTANT时,此参数表示图像边界外的值,默认为0
给定四个点来进行转换操作,其中M矩阵的创建方式为:
pts1 = np.float32([[xx,xx], [xxx,xxx], [xxx,xxx],[xxx,xxx]])
pts2 = np.float32([[xx,xx], [xxx,xxx], [xxx,xxx],[xxx,xxx]])
# 构建M
M = cv.getAffineTransform(pts1, pts2)
感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
【Opencv 图像几何变换】
祝愉快🌟!