安装Opencvhtml
pip install --upgrade setuptools pip install numpy Matplotlib pip install opencv-python
opencv环境已经整好,就是这么简单。只须要numpy、Matplotlib、opencv-python三个包,都不大很快就能够下好,若是下载中间出现error或wrong,从新输入命令便可。python
参考 OpenCv官方教材文档数组
一 Dome函数
##01打开显示一张图片,显示灰度图片动画
import numpy as npui import cv2 as cv编码 ##01打开显示一张图片,显示灰度图片spa img = cv.imread('E:\\fruits.jpg',0);#读取一张图片,注意路径须要转义,第二个参数是模式code 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()
|
##摄像头显示一帧帧图片
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()
|
主要函数:线: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 使用说明