Opencv | 图像几何变换

一. 图像几何变换

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 图像几何变换

祝愉快🌟!


相关推荐

  1. Opencv | 图像几何变换

    2024-04-22 20:16:05       54 阅读
  2. OpencV图像几何形状绘制

    2024-04-22 20:16:05       46 阅读
  3. C++版OpenCV_02_几何变换

    2024-04-22 20:16:05       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 20:16:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 20:16:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 20:16:05       82 阅读
  4. Python语言-面向对象

    2024-04-22 20:16:05       91 阅读

热门阅读

  1. 子集运算应用举例

    2024-04-22 20:16:05       40 阅读
  2. Chatgpt系列(二) 如何写prompt提词

    2024-04-22 20:16:05       36 阅读
  3. WebRTC的3A和SpeexDSP如何选择

    2024-04-22 20:16:05       40 阅读
  4. 接口请求与对象转json中字段大小写的处理

    2024-04-22 20:16:05       27 阅读
  5. Rust常用特型之Default特型

    2024-04-22 20:16:05       37 阅读
  6. npm常用命令详解

    2024-04-22 20:16:05       33 阅读
  7. 生活无趣感的成因与破解之道

    2024-04-22 20:16:05       29 阅读
  8. 大数据集群中部署Hive

    2024-04-22 20:16:05       29 阅读