Opencv 方法指令
- 图像窗口的打开与关闭
- 打开:img=cv2.imread(image_path)
- 显示:cv2.imshow("test",img)
- 控制: cv2.waitKey()其中可以填显示时间,>0则显示那么长时间,空/0则固定
- 关闭窗口: cv2.destroyAllWindows()
- 视频的打开与关闭
- 打开
- 像素值的修改
- 方法一:暴力循环修改
- 方法二:直接修改
- 手动生成图像
- 图像的色彩空间
- 如果想从图像或者视频中按照某个物体的颜色将其轮廓提取出来,则采用HSV色彩空间变换方法
- 图像通道的分割与合并
图像窗口的打开与关闭
打开:img=cv2.imread(image_path)
显示:cv2.imshow(“test”,img)
控制: cv2.waitKey()其中可以填显示时间,>0则显示那么长时间,空/0则固定
关闭窗口: cv2.destroyAllWindows()
视频的打开与关闭
打开
1 2 3 4 5 6 7 8 9 10 11 | cap=cv2.VideoCapture(video_path) while(True): ret,frame=cap.read() if ret==False: break frame=cv2.flip(frame,1)#左右镜像处理 cv2.imshow('frame',frame) c=cv2.waitKey(30)#设定30秒 if c==27:#如果按ESC键,则退出 break cap.release()#释放资源 |
像素值的修改
方法一:暴力循环修改
1 2 3 4 5 6 7 8 | img=cv2.imread(image_path) h,w,c=img.shape for row in range(h): for col in range(w): for ch in range(c): pixel=img[row,col,ch] img[row,col,ch]=255-pixel #相当于将图像的每个通道,每个像素点的值取反 |
方法二:直接修改
1 2 | img=cv2.bitwise_not(src)#图像像素取反 #功能与上面相同,相当于将每个像素的值按位取反 |
手动生成图像
可以先手动生成一个具体大小的shape的图像区域,对其填充全0,或者全1,即生成一个对应维数的全零、全一矩阵,然后在对其统一赋值
1 2 3 4 5 6 7 | img=np.zeros([400,400,3],dtype=np.uint8) img[:,:,2]=np.ones([400,400],np.uint8)*255 cv2.imshow("creat",img) #生成一个全零的三通道矩阵,并对第三个通道赋值为255 或者: img=img[:,:,2] img.fill(255) |
图像的色彩空间
主要有RGB,GRAY,HSV,YUV
1 2 3 4 5 6 7 | img=cv2.imread(image_path) #灰度变换 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #HSV变换 hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #YUV变换 yuv=cv2.cvtColor(img,cv2.COLOR_BGR2YUV) |
如果想从图像或者视频中按照某个物体的颜色将其轮廓提取出来,则采用HSV色彩空间变换方法
上面是HSV的颜色分量表
如:想将下图RGB图像中的绿色物体找到,得到右侧的效果图
我们以视频处理为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | cap=cv2.VideoCapture('./2.mp4') while(True): ret,frame=cap.read() if ret==False: break ''' hsv 通过inRange可以对视频/图像中的颜色进行追踪 ''' hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#RGB转HSV lower_hsv=np.array([35,43,46])#绿色最低值 higher_hsv=np.array([77,255,255])#黄色最高值 mask=cv2.inRange(hsv,lowerb=lower_hsv,upperb=higher_hsv)#通过cv2.inRange,就可以找到图像中的绿色物体 cv2.imshow('frame',frame) cv2.imshow('mask',mask) if cv2.waitKey(30)==27: break cap.release() |
图像通道的分割与合并
1 2 | b,g,r=cv2.split(src)#通过cv2.split进行分割 img=cv2.merge([b,g,r])#通过cv2.merge进行合并,但是其参数是一个数组形式 |