这篇文章是我看《opencv-python-Tutorial-中文版》的笔记
#导入
import cv2
import numpy as np
cv2.namedWindow('imghsv',cv2.WINDOW_NORMAL)
cv2.resizeWindow('imghsv',640,480)
cv2.namedWindow('imggray',cv2.WINDOW_NORMAL)
cv2.resizeWindow('imggray',640,480)
img=cv2.imread('D:\BaiduNetdiskDownload\practice2.jpg',1)
颜色空间转换
转换颜色空间 cv2.cvtColor(input_img,flag)
#转换颜色空间:cv2.cvtColor(input_img,flag)
imggray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imghsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#HSV H(色彩/色度)[0,179] S(饱和度)[0,255] V(亮度)[0,255]
cv2.imshow('imggray',imggray)
cv2.imshow('imghsv',imghsv)
物体跟踪
#物体跟踪
#从视频中获取每一帧图像
#将图像转换到HSV空间
#设置HSV阈值到蓝色范围
#获取蓝色物体
k=0
cap=cv2.VideoCapture(0)
while(1):
ret,frame=cap.read()
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#设定蓝色阈值
lower_blue=np.array([0 ,52, 50])
upper_blue=np.array([200,255,255])
#根据阈值构建掩模
mask=cv2.inRange(hsv,lower_blue,upper_blue)#高过一定值变成0,去除阈值以外的部分
#对图像和掩模进行位运算
res=cv2.bitwise_and(frame,frame,mask=mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k==cv2.waitKey(1)
if k==27:
break
cv2.destroyAllWindows()
#找到跟踪对象的HSV值
#cv2.cvtColor(BGR值,cv2.COLOR_BGR2HSV)
green=np.uint8([[[0,255,0]]])#一定要三个[],对应cvArray,cvMat,IplImage
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)#阈值上下浮动100(?)
几何变换
扩展缩放
#扩展缩放
#缩放:cv2.INTER_AREA
#扩展:cv2.INTER_CUBIC CV2.INTER_LINEAR
#默认下所有改变图像尺寸大小的操作使用的插值方法都是cv2.INTER_LINEAR
height,width=img.shape[:2]
#下面的None本应该是输出图像的尺寸,但是后面我们设置了缩放因子,因此这里为None
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#OR 直接设置了输出图像的尺寸,所以不用设置缩放因子
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
cv2.namedWindow('res',cv2.WINDOW_NORMAL)
cv2.resizeWindow('res',640,480)
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',640,480)
while(1):
cv2.imshow('res',res)
cv2.imshow('img',img)
k==cv2.waitKey(1)
if k==27:
break
cv2.destroyAllWindows()
平移
#src – 输入图像。
#M – 变换矩阵。
#dsize – 输出图像的大小。
#flags – 插值方法的组合(int 类型!)
#borderMode – 边界像素模式(int 类型!)
#borderValue – (重点!)边界填充值; 默认情况下,它为0。
img=cv2.imread(r"D:\opencv\opencv_exercises-master\images\CrystalLiu2.jpg", 1)
rows,cols,channels=img.shape
m = np.float32([[1, 0, 200], [0, 1, 100]])#不要打成np.float
img2=cv2.warpAffine(img,m,(cols,rows))
cv2.imshow('image',img2)
cv2.waitKey(0)
旋转
#旋转
#cv2.getRotationMatrix2D() 参数为:center,角度,缩放
img=cv2.imread(r"D:\opencv\opencv_exercises-master\images\CrystalLiu2.jpg", 1)
rows,cols,channels=img.shape
m=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
dst=cv2.warpAffine(img,m,(cols,rows))
cv2.imshow('dst',dst)
cv2.waitKey(0)
仿射变换
#cv2.getAffineTransform(pts1,pts2) 通过这个函数求出仿射变换的矩阵
img=cv2.imread(r"D:\opencv\opencv_exercises-master\images\dave.png", 1)
rows,cols,channels=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[10,100],[200,50],[100,200]])
m=cv2.getAffineTransform(pts1,pts2)
dst=cv2.warpAffine(img,m,(2*cols,rows))
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
透视变换
#透视变换
img=cv2.imread(r"D:\opencv\opencv_exercises-master\images\dave.png", 1)
rows,cols,channels=img.shape
pts1=np.float32([[50,50],[200,53],[20,20],[70,79]])
pts2=np.float32([[10,100],[200,50],[105,200],[111,122]])
m=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,m,(300,300))
cv2.imshow('dst',dst)
cv2.waitKey(0)