对图片的操作
- 1.图片镜像旋转(cv2.flip())
- 2 图像的矫正
1.图片镜像旋转(cv2.flip())
图像的旋转是围绕一个特定点进行的,而图像的镜像旋转则是围绕坐标轴进行的。图像的镜像旋转分为水平翻转、垂直翻转、水平垂直翻转三种。
水平翻转就是将图片的像素点沿y轴翻转,具体到像素点来说就是令其坐标从(x,y)翻转为(-x,y)。
垂直翻转就是将图片的像素点沿x轴翻转,具体到像素点来说就是其坐标从(x,y)翻转为(x,-y)
水平垂直翻转就是水平翻转和垂直翻转的结合,具体到像素点来说就是其坐标从(x,y)翻转为(-x,-y)。用公式表示为:
由图像的旋转我们知道,图像在旋转的时候需要有旋转中心,而图像的镜像旋转虽然都是围绕x轴和y轴进行旋转,但是我们也需要确定x轴和y轴的坐标。在OpenCV中,图片的镜像旋转是以图像的中心为原点进行镜像翻转的。也就是说,水平翻转时,图像的左侧和右侧会关于中心点进行交换,垂直翻转时,图像的上侧和下侧会关于中心点进行交换。
代码格式如下:
cv2.flip(img,flipcode)
参数如下:
- img:要旋转的图
- flipcode:沿着哪个轴旋转
在本实验中,图片镜像旋转组件里的参数flipcode有三个选择:
- 0:垂直翻转
- 大于0:水平翻转
- 小于0:水平垂直翻转
代码如下:
'''图片的镜像旋转'''
img=cv2.imread(f'../15day4.10/src/1.jpg')
#图像垂直镜像旋转
img_v=cv2.flip(img,0)
#图像水平镜像旋转
img_h=cv2.flip(img,1)
#图像水平垂直镜像旋转
img_vh=cv2.flip(img,-1)
cv2.imshow("img",img)
cv2.imshow("imgv",img_v)
cv2.imshow("imgh",img_h)
cv2.imshow("imgvh",img_vh)
cv2.waitKey(0)
2 图像的矫正
而OpenCV里也提供了getPerspectiveTransform()函数用来生成该3*3的透视变换矩阵。
getPerspectiveTransform(src,dst)
在该函数中,需要提供两个参数:
src:原图像上需要进行透视变化的四个点的坐标,这四个点用于定义一个原图中的四边形区域。
dst:透视变换后,src的四个点在新目标图像的四个新坐标。
该函数会返回一个透视变换矩阵,得到透视变化矩阵之后,使用warpPerspective()函数即可进行透视变化计算,并得到新的图像。该函
cv2.warpPerspective(src, M, dsize, flags, borderMode)
数需要提供如下参数:
src:输入图像。
M:透视变换矩阵。这个矩阵可以通过getPerspectiveTransform函数计算得到。
dsize:输出图像的大小。它可以是一个Size对象,也可以是一个二元组。视口
flags:插值方法的标记。
borderMode:边界填充的模式。
代码如下:
'''图像的矫正-'''
img=cv2.imread(r"../15day4.10/src/3.png")
h,w,c=img.shape
pts1=np.float32(([178,100],[487,134],[124,267],[473,308]))# 原图像里面想要内容四个角的坐标
pts2=np.float32(([0,0],[w,0],[0,h],[w,h])) #透视变换后在二维的坐标
#获取透视变换矩阵
m=cv2.getPerspectiveTransform(pts1,pts2)
# 获取变换后的图像
img2=cv2.warpPerspective(img,M=m,dsize=(w,h))
cv2.imshow("img",img)
cv2.imshow("img2",img2)
cv2.waitKey(0)