Aim:变换动作(移动,旋转,仿射变换)cv2.getPerspectiveTransfrom() ——解释:实现所有类型的变换。
cv2.warpAffine() ——解释:参数是 2 3变换矩阵。
cv2.warpPerspective() ——解释:参数是 33变换矩阵。
扩展缩放——改变图像的尺寸大小
- cv2.resize(src,dst,interpolation=CV_INTER_LINEAR) ——解释:改变图像的尺寸大小。
- cv2.INTER_AREA()
- cv2.INTER_CUBIC() [慢]
- cv2.INTER_LINEAR() ——解释:改变图像尺寸大小的操作使用的插值方法。
代码演示
# coding=utf-8
import cv2
import numpy as np
img=cv2.imread('222.jpg')
res=cv2.resize(img,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_CUBIC)
# None为输出图像的尺寸
height,width=img.shape[0.5]
res=cv2.resize(img,(1*width,1*height),interpolation=cv2.INTER_CUBIC)
while(1):
# cv2.imshow('res',res)
cv2.imshow('img',img)
if cv2.waitKey(1) &0xFF == 27:
break
cv2.destroyAllWindows()
平移
- 沿(x,y)方向移动图像,则移动距离是(tx,ty)。移动矩阵:第一行 1 0 tx 第二行 0 1 ty。
- 使用Numpy数组构建矩阵,数据类型np.float32。传值cv2.warpAffine()。
代码演示
# coding=utf-8
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
while(1):
ret,frame=cap.read() #获取图像
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) #转换为hsv
# 设置颜色阈值
lower_blue=np.array([110,50,50])
upper_blue=np.array([130,255,255])
mask=cv2.inRange(hsv,lower_blue,upper_blue) #根据阈值构建掩模
res=cv2.bitwise_and(frame,frame,mask=mask) #对原图和掩模进行位运算
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k=cv2.waitKey(5) &0xFF
if k==27:
break
cv2.destroyAllWindows()
旋转
- 对一个图像旋转角度θ:旋转矩阵 M = 第一行 cosθ -sinθ 第二行 sinθ cosθ。
- 任意位置旋转(opencv平台):旋转矩阵 第一行 α β (1-α)·center.x - β·center.x 第二行 -β α β·center.x+(1-α)·center.x 其中:α=scale·cosθ β=scale·sinθ。
- cv2.getRotationMatrix2D ——解释:构建旋转矩阵。
代码演示
# 图像旋转90°
# coding = utf-8
import cv2
import numpy as np
img=cv2.imread('123.jpg')
rows,cols=img.shape
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6) #旋转矩阵 旋转中心,旋转角度,缩放因子
dst=cv2.warpAffine(img,M,(2*cols,2*rows)) #输出图像尺寸中心
while(1):
cv2.imshow('dst',dst)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
仿射变换
- 特点:原图中所有的平行弦在结果图中同样平行。
- Aim:找出原图中三个点以及输出图像中的位置。
- cv2.getAffineTransform:创建2*3的矩阵。
代码演示
# 绿色标点
# coding=utf-8
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('123.jpg')
rows,cols,ch=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[10,100],[200,50],[100,250]])
M=cv2.getAffineTransform(pts1,pts2)
dst=cv2.warpAffine(img,M,(cols,rows))
plt.subplot(12,plt.imshow(img),plt.title('input'))
plt.subplot(12,plt.imshow(img),plt.title('output'))
plt.show()
透视变换
- 视角变换:需求 3*3变换矩阵。在图上找4个点,以及其在输出图像上对应位置。任意三点不能共线。cv2.getPerspectiveTransform(),传值cv2.warpPerspective()。
代码演示
# coding=utf8
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('123.jpg')
rows,cols,ch=img.shape
pts1=np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2=np.float32([[0,0],[300,0],[0,300],[300,300]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpAffine(img,M,(300,300))
plt.subplot(121,plt.imshow(img),plt.title('xiaoyin'))
plt.subplot(121,plt.imshow(img),plt.title('hhh'))
plt.show()
未知错误。