opencv- python使用

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)
View Code

  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()
View Code

   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()
View Code

    如果不加转换:

      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()
View Code

 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()
View Code

    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()
View Code

       首先要创建一个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()
View Code

   7、使用鼠标当画笔:

    

原文地址:https://www.cnblogs.com/yangsongwei/p/8933521.html