opencv_python使用
一、opencv中的Gui特性:
1、读入图像:
cv2.imread()函数读入图像。其参数是:
(1)此图片的路径。
(2)告诉函数如何读取这幅图片:
cv2.IMREAD_COLOR:读入一副彩色图像。但图像的透明度会被忽略,可以用1表示。
cv2.IMREAD_GRAYSCALE:以灰度模式读入图像,可以用0表示。
cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的alpha通道,我还没有试出来这个该如何表示。
1 import numpy as np 2 import cv2 3 img=cv2.imread('F:pythonopencvpickongfu.jpg',0)
2、显示图像:
cv2.imshow() 显示图像。第一个参数是窗口的名字,其次是获得的图像参数。
3、保存图像:
使用函数cv2.imwrite()来保存一个图像。第一个参数是一个文件名,之后是你要保存的图像。
总结代码:
1 #下面的程序将会加载一个灰度图,显示图片,按下’s’键保存后退出,或者按下 ESC 键退出不保存 2 import numpy as np 3 import cv2 4 img=cv2.imread('F:pythonopencvpickongfu.jpg',0) 5 cv2.imshow('功夫熊猫',img) 6 k=cv2.waitKey(0) 7 if k==27: 8 cv2.destoryAllWindows() 9 elif k==ord('s'): 10 cv2.imwrite('F:pythonopencvpickongfu.png',img) 11 cv2.destroyAllWindows()
4、使用matplotlib库:
需要注意的是:matplotlib使用的是rgb模式,但cv2使用的是bgr顺序,所以如果用cv2加载图像,需要将其转换为rgb模式。
1 # -*- coding: utf-8 -*- 2 """ 3 Created on 2018/4/25 4 @author:monty 5 """ 6 7 import numpy as np 8 import cv2 9 from matplotlib import pyplot as plt 10 11 img=cv2.imread('..pickongfu.jpg') 12 plt.imshow(img) 13 plt.xticks([]) 14 plt.yticks([]) 15 plt.show() 16 cv2.imshow('kongfu',img) 17 cv2.waitKey(0) 18 cv2.destroyAllWindows()
如果不加转换:
matplotlib画出来的图像是:
正常图像:
需要将img转换为rgb模式,代码为:
img2=img[:,:,::-1]
1 # -*- coding: utf-8 -*- 2 """ 3 Created on 2018/4/25 4 @author:monty 5 """ 6 7 import numpy as np 8 import cv2 9 from matplotlib import pyplot as plt 10 11 img=cv2.imread('..pickongfu.jpg') 12 img2=img[:,:,::-1] 13 plt.imshow(img2) 14 plt.xticks([]) 15 plt.yticks([]) 16 plt.show() 17 cv2.imshow('kongfu',img) 18 cv2.waitKey(0) 19 cv2.destroyAllWindows()
5、视频:
(1)用摄像头捕获视频:
1 # -*- coding: utf-8 -*- 2 """ 3 Created on 2018/4/25 10:01 4 @author:monty 5 6 """ 7 import numpy as np 8 import cv2 9 10 #首先需要生成一个VideoCapture对象 参数是设备的索引号或者一个视频文件 你自己笔记本上的内置摄像头的索引号是参数0 可以通过设置成1或别的来选择摄像头 11 cap=cv2.VideoCapture(0) 12 13 while(True): 14 ret,frame=cap.read() 15 16 gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 17 18 cv2.imshow('frame',gray) 19 20 if cv2.waitKey(1) & 0xFF == ord('q'): 21 break 22 23 cap.release() 24 cv2.destroyAllWindows()
cap.read() 函数返回一个布尔值,如果帧读取是正确的,返回值是true,所以可以通过检查它的返回值来查看视频文件是否读取到了结尾。
cap.get(propId)来获取视频的参数信息。这里propId可以是0~18之间的任何整数。
其中一些值可以使用cap.set(propId,value)来修改,value是要设置的新值。
(2)保存视频:
1 #测试打开摄像头,保存视频 2 import numpy as np 3 import cv2 4 5 cap=cv2.VideoCapture(0) 6 7 fourcc=cv2.VideoWriter_fourcc(*'DIVX') 8 9 out=cv2.VideoWriter('..picoutput.avi',fourcc,20.0,(640,480)) 10 11 while(cap.isOpened()): 12 ret,frame = cap.read() 13 14 if ret==True: 15 frame=cv2.flip(frame,1) 16 17 out.write(frame) 18 19 cv2.imshow('frame',frame) 20 21 if(cv2.waitKey(1) & 0xFF == ord('q')): 22 break 23 else: 24 break 25 26 cap.release() 27 out.release() 28 cv2.destroyAllWindows()
首先要创建一个VideoWriter的对象,来确定输出文件。接下来指定FourCC编码,播放频率和帧的大小。最后一个是isColor标签,如果是True,则每一帧是彩色的,否则是灰色的。
cv2.flip()函数用法:
6、opencv的绘图函数:
以下函数需要设置这些参数:
img:想要绘制图形的那副图像
color:形状的颜色。
thickness:线条的类型。
1 import numpy as np 2 import cv2 3 4 # Create a black image 5 img = np.zeros((512,512,3), np.uint8) 6 7 # Draw a diagonal blue line with thickness of 5 px 8 cv2.line(img,(0,0),(511,511),(255,0,0),5) 9 cv2.rectangle(img,(384,0),(510,128),(0,255,0),3) 10 11 cv2.circle(img,(447,63), 63, (0,0,255), -1) 12 cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1) 13 14 font=cv2.FONT_HERSHEY_SIMPLEX 15 cv2.putText(img,'monty',(10,500), font, 4,(255,255,255),2) 16 cv2.imshow('draw',img) 17 cv2.waitKey(0) 18 cv2.destroyAllWindows()
7、使用鼠标当画笔: