OpenCV图像处理
几何变换
图像缩放:cv.resize(src,dsize,fx=0,fy=0,interpolation=cv.INTER_LINEAR)
dsize:绝对尺寸,直接指定调整后图像的大小。
fx,fy:相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可。
interpolation:插值方法。其中INTER_LINEAR:双线性插值法;INTER_NEAREST:最近邻插值;INTER_AREA:像素区域重采样(默认);INTER_CUBIC:双三次插值。
图像平移:
将图像按照指定方向和距离,移动到相应的位置。
cv.warpAffine(img,M,dsize)
img:要操作的图像
M:2*3移动举证,对于(x,y)处的像素点,要把它移动到(x+tx,y+ty)处时,M矩阵应如下设置:
注意:将M设置为np.float32类型的Numpy数组。
dsize:输出图像的大小。
注意:输出图像的大小,他应该是(宽度,高度)的形式。请记住,width=列数,height=行数。
图像旋转:
指图像按照某个位置转动一定角度的过程。旋转中图片仍保持原始尺寸。
OpenCV中图像旋转首先根据旋转角度和旋转中心获取旋转矩阵,然后根据旋转矩阵进行变换,即可实现任意角度和任意中心的旋转效果。
API:cv.getRotationMatrix2D(center,angle,scale)
center:旋转中心。
angle:旋转角度。
scale:缩放比例。
返回:
M:旋转矩阵。
调用cv.warpAffine完成图像的旋转。
仿射变换
图像的仿射变换涉及到图像的形状位置角度的变化,主要是对图像进行缩放,旋转,翻转,平移等操作。
在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建这个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后使用cv.getAffineTransform会创建一个2×3的矩阵,最后这个矩阵会被传给函数cv.warpAffine。
投射变换
利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光纤束,仍能保持承影面上投影的几何图形不变的变换。
在OpenCV中,我们要找到4个点,其中任意三个点不共线,然后获取变换矩阵T,再进行透射变换,通过函数cv.getPerspectiveTransform找到变换矩阵,将cv。warpPerspective应用于此3×3变换矩阵。
import cv2
import matplotlib.pyplot as plt
import numpy as np
lena1=cv2.imread("1.jpg")
cv2.imshow("image",lena1)
# cv2.waitKey(0)
#matplotlib中展示
plt.imshow(lena1[::-1,::-1,::-1])
plt.show()
px=lena1[100,100]
print(px)
lena2=cv2.imread("2.jpg")
lena2=cv2.resize(lena2,(800,1099))
img=cv2.add(lena1,lena2)
cv2.imshow("img",img)
img2=cv2.addWeighted(lena1,0.3,lena2,0.7,5)
cv2.imshow("img2",img2)
img3=cv2.resize(img2,(400,500),interpolation=cv2.INTER_CUBIC)
cv2.imshow("img3",img3)
rows,cols=img3.shape[:2]
M=np.float32([[1,0,100],[0,1,50]])
img4=cv2.warpAffine(img3,M,(rows,cols))
cv2.imshow("img4",img4)
M=cv2.getRotationMatrix2D((rows/2,cols/2),90,1)
img5=cv2.warpAffine(img3,M,(rows,cols))
cv2.imshow("img5",img5)
a1=np.float32([[50,50],[50,200],[200,50]])
a2=np.float32([[100,50],[50,200],[200,100]])
M1=cv2.getAffineTransform(a1,a2)
img6=cv2.warpAffine(img2,M1,(cols,rows))
cv2.imshow("img6",img6)
#透射变换
b1=np.float32([[32,12],[14,25],[23,32],[14,23]])
b2=np.float32([[44,23],[12,32],[22,32],[43,23]])
M2=cv2.getPerspectiveTransform(b1,b2)
img6=cv2.warpPerspective(img2,M2,(cols,rows))
cv2.imshow("img6",img6)
cv2.
