一 OpenCV GUI特性

安装Opencv

pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python

  opencv环境已经整好,就是这么简单。只需要numpy、Matplotlib、opencv-python三个包,都不大很快就可以下好,如果下载中间出现error或wrong,重新输入命令即可。

 

参考 OpenCv官方教材文档

1.http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_table_of_contents_gui/py_table_of_contents_gui.html#

 一 Dome

1.图片

##01打开显示一张图片,显示灰度图片

import numpy as np

import cv2 as cv

##01打开显示一张图片,显示灰度图片

img = cv.imread('E:\\fruits.jpg',0);#读取一张图片,注意路径需要转义,第二个参数是模式

cv.imwrite('E:\\fruits_copy.jpg',img);#写一张图片

cv.namedWindow('IMG_NAME',cv.WINDOW_NORMAL);#定义一个窗口

cv.imshow('IMG_NAME',img);#显示窗口图片

cv.waitKey(0);#等待响应

cv.destroyAllWindows();#销毁窗体

 

##02使用matplotlib显示坐标画图

import numpy as np

import cv2 as cv

from matplotlib import pyplot as plt

##02使用matplotlib显示坐标画图

img = cv.imread('E:\\fruits.jpg',0)

plt.imshow(img,cmap = 'gray',interpolation = 'bicubic')#

##plt.xticks([]),plt.yticks([])#x/y轴坐标隐藏,去掉就显示

plt.show()

 

2.视频

##摄像头显示一帧帧图片

import numpy as np

import cv2 as cv

#01内置摄像头打开

cap = cv.VideoCapture(0)

while(True):

    ret,frame = cap.read()#

    gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)

    cv.imshow('frame',gray)

    if cv.waitKey(1) & 0xff == ord('q'):

        break

cap.release()

cv.destroyAllWindows()

##处理后保存摄像头视频

##flip水平或者垂直翻转数组

import numpy as np

import cv2

#打开摄像头

cap = cv2.VideoCapture(0)

 

#定义编码器和写对象

fourcc = cv.cv.FOURCC(*'XVID')

out = cv.VideoWriter('E:\\output.avi',fourcc,20.0,(640,480))

#读取摄像头的一帧

while cap.isOpened():

    ret,frame = cap.read()

    if ret == True:

        #翻转图片

        frame = cv.flip(frame,0)

        #写出

        out.write(frame)

        cv.imshow('frmae',frame)

        #中断判断

        if cv.waitKey(1) & 0xff == ord('q'):

            break

    else:

        break

#释放内存/资源

cap.release()

out.release()

cv.destroyAllWindows()

 

 

3.绘画

主要函数:线:cv2.line()  圆 cv2.circle() 矩阵 cv2.rectangle() 椭圆 cv2.ellipse() 文字 cv2.putText()

函数的参数:img,color,thickness,linetype

·##简单绘画

import numpy as np

import cv2 as cv

#设置一张背景图片

img = np.zeros((512,512,3),np.uint8)

##img = cv.imread('E:\\fruits.jpg',0);

 

cv.line(img,(0,0),(511,511),(255,0,0),5)#画线

cv.circle(img,(477,263),63,(0,0,255),8,8)#画圆

cv.rectangle(img,(384,0),(510,128),(0,255,0),3)#矩阵

cv.ellipse(img,(256,256),(100,50),0,0,360,255,-1)#椭圆

font = cv.FONT_HERSHEY_SIMPLEX

cv.putText(img,'helloworld',(10,500),font,4,(255,255,255),2)

 

##pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)#连点多边形,可以通过多条line连接形成

##pts = pts.reshape(-1,1,2)

 

#显示

cv.namedWindow('IMG_NAME',cv.WINDOW_NORMAL);#定义一个窗口

cv.imshow('IMG_NAME',img);#显示窗口图片

cv.waitKey(0);#等待响应

cv.destroyAllWindows();#销毁窗体

·##加强绘画:左击画圆

 

import cv2 as cv

import numpy as np

#鼠标响应函数

 

def draw_circle(event,x,y,flags,param):

    if event == cv.EVENT_LBUTTONDBLCLK:#左击

        cv.circle(img,(x,y),63,(0,0,255),8,8)#画圆

#窗体及显示

img = np.zeros((512,512,3),np.uint8)

cv.namedWindow('IMG_NAME');#定义一个窗口

cv.setMouseCallback('IMG_NAME',draw_circle)

#重绘刷新

while(1):

    cv.imshow('IMG_NAME',img)

    if cv.waitKey(20) & 0xff == 27:#ESC退出

        break

 

#显示

 

cv.waitKey(0);#等待响应

cv.destroyAllWindows();#销毁窗体

·##加强绘画:拖动画图

import numpy as np

import cv2 as cv

drawing = False

mode = 'a'

ix,iy =-1,-1

#创建回调函数

def draw_circle(event,x,y,flags,params):

    global ix,iy,drawing,mode

    #左击,返回起始位置

    if event == cv.EVENT_LBUTTONDOWN:

        drawing = True

        ix,iy = x,y

    elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON:

        if drawing == True:

            if mode == 'a':#画线

                cv.rectangle(img,(x,y),(x,y),(0,255,0),-1)

            elif mode == 'b':#画圆

                cv.circle(img,(x,y),6,(0,255,0),-1)

    elif event == cv.EVENT_LBUTTONUP:

            drawing =False

##          

img=np.zeros((512,512,3),np.uint8)

cv.namedWindow('image')

cv.setMouseCallback('image',draw_circle)

##刷新重绘

while(1):

    cv.imshow('image',img)

    k=cv.waitKey(1)&0xFF

    if k==ord('a'):

        mode='a'

    elif k==ord('b'):

        mode='b'

    elif k==27:

        break

·##加强画图:调色板

import numpy as np

import cv2 as cv

#

def nothing(x):

    pass

#

img = np.zeros((300,512,3),np.uint8)

cv.namedWindow('image')

cv.createTrackbar('R','image',0,255,nothing)

cv.createTrackbar('G','image',0,255,nothing)

cv.createTrackbar('B','image',0,255,nothing)

 

switch = '0:OFF\n1:ON'

cv.createTrackbar(switch,'image',0,1,nothing)

while(1):

    cv.imshow('image',img)

    k = cv.waitKey(1)&0xff

    if k == 27 :

        break

    r = cv.getTrackbarPos('R','image')

    g = cv.getTrackbarPos('G','image')

    b = cv.getTrackbarPos('B','image')

    s = cv.getTrackbarPos(switch,'image')

    if s == 0:

        img[:]=0

    else:

        img[:]=[b,g,r]

cv.destroyAllWindows()

 

 

·##上述两种功能结合在一起,可调色的画板

import numpy as np

import cv2 as cv

drawing = False

mode = 'a'

ix,iy =-1,-1

#创建回调函数

def draw_circle(event,x,y,flags,params):

    global ix,iy,drawing,mode

    #获取颜色值

    r = cv.getTrackbarPos('R','image')

    g = cv.getTrackbarPos('G','image')

    b = cv.getTrackbarPos('B','image')

    color = [r,g,b]

 

    #左击,返回起始位置

    if event == cv.EVENT_LBUTTONDOWN:

        drawing = True

        ix,iy = x,y

    elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON:

        if drawing == True:

            if mode == 'a':#画线

                cv.rectangle(img,(x,y),(x,y),color,-1)

            elif mode == 'b':#画圆

                cv.circle(img,(x,y),6,color,-1)

    elif event == cv.EVENT_LBUTTONUP:

            drawing =False

##   

def nothing(x):pass

 

img=np.zeros((512,512,3),np.uint8)

cv.namedWindow('image')

 

#选择颜色

cv.createTrackbar('R','image',0,255,nothing)

cv.createTrackbar('G','image',0,255,nothing)

cv.createTrackbar('B','image',0,255,nothing)

 

 

cv.setMouseCallback('image',draw_circle)

##刷新重绘

while(1):

    cv.imshow('image',img)

    k=cv.waitKey(1)&0xFF

    if k==ord('a'):

        mode='a'

    elif k==ord('b'):

        mode='b'

    elif k==27:

        break

 

 

二 API 使用说明

参考http://opencv.jp/opencv-2.2_org/py/index.html

 

posted on 2017-06-23 11:03  freeo  阅读(1291)  评论(0编辑  收藏  举报