1.图像翻转(图像镜像旋转)
cv2.flip(img,flipcode) ## img,想要翻转的图片;flipcode,指定翻转类型
flipcode >0,水平翻转;flipcode=0,垂直翻转;flipcode<0,水平加垂直翻转
2.图像的仿射变换
特点:保持直线,保持平行,比例不变性,不保持角度和长度
基本的仿射变换类型:旋转,剪切,平移,缩放
仿射变换函数:cv2.warpaffine(img,m,dsize) ## img,想要仿射变换的图像;m,仿射变换的矩阵;dsize,得到图像的尺寸。
(1)旋转
cv2.getRotationMatrix2D(center,angle,scale)函数:
center:旋转中心
angle:旋转角度
scale:缩放比例
作用:用于获得旋转矩阵m=cv2.getRotationMatrix2D(center,angle,scale)
cv2.warpaffine(img,m,dsize)
(2)平移
平移矩阵:m=[[1,0,tx],[0,1,ty]]
cv2.warpaffine(img,m,dsize)
(3)缩放
缩放矩阵:m =[[sx,0,0],[0,sy,0]]
cv2.warpaffine(img,m,dsize)
(4) 剪切
剪切矩阵:m = np.float32([[1,shy,0],[shx,1,0]])
cv2.warpaffine(img,m,dsize)
3.插值方法
(1)最近邻插值法 CV2.INTER_NEAREST,最快速
(2)双线性插值法 CV2.INTER_LINEAR,最常用
(3)像素区域插值法 cv2.INTER_AREA
(4)双三次插值法 cv2.INTER_CUBIC
(5)Lanczos插值法 cv2.INTER_LANCZOS4
总结:最近邻插值的计算速度最快,但是可能会导致图像出现锯齿状边缘和失真,效果较差。双线性插值的计算速度慢一点,但效果有了大幅度的提高,适用于大多数场景。双三次插值、Lanczos插值的计算速度都很慢,但是效果都很好。
在OpenCV中,关于插值方法默认选择的都是双线性插值,且一般情况下双线性插值已经能满足大部分需求。
4.边缘填充
(1)边界复制 BORDER_REPLICATE
边界复制会将边界处的像素值进行复制,然后作为边界填充的像素值。
(2)边界反射 BORDER_REFLECT
(3)边界反射101 BORDER_REFLECT_101
(4)边界常数 BORDER_CONSTANT
(5)边界包裹 BORDER_WRAP
5.图像矫正(透视变换)
透视变换矩阵:M=getPerspectiveTransform(src,dst)
src:原图像上需要进行透视变化的四个点的坐标,这四个点用于定义一个原图中的四边形区域。
dst:透视变换后,src的四个点在新目标图像的四个新坐标。
透视变换函数:cv2.warpPerspective(src, M, dsize, flags, borderMode)
src:输入图像。
M:透视变换矩阵。这个矩阵可以通过getPerspectiveTransform函数计算得到。
dsize:输出图像的大小。它可以是一个Size对象,也可以是一个二元组。
flags:插值方法的标记。
borderMode:边界填充的模式。
6.色彩空间的转换
OpenCV中,图像色彩空间转换是一个非常基础且重要的操作,就是将图像从一种颜色表示形式转换为另一种表示形式的过程。通过将图像从一个色彩空间转换到另一个色彩空间,可以更好地进行特定类型的图像处理和分析任务。常见的颜色空间包括RGB、HSV、YUV等。
色彩空间转换的作用:提高图像处理效果,节省计算资源。
颜色加法:cv2.add(img1,img2)
颜色加权加法:cv2.addWeighted(src1,alpha,src2,deta,gamma)
src1
、src2
:输入图像。
alpha
、beta
:两张图象权重。
gamma
:亮度调整值。
gamma > 0
,图像会变亮。gamma < 0
,图像会变暗。gamma = 0
,则没有额外的亮度调整。
rgb转hsv: cv.cvtColor(img, cv.COLOR_BGR2HSV)
rbg转灰度:cv.cvtColor(cat, cv.COLOR_BGR2GRAY)