关于OpenCV
OpenCV是一个C 库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。
在Windows 上安装OpenCV-Python
一.
下载pip工具包并解压安装,python setup.py install
下载地址:https://pypi.python.org/pypi/pip
测试是否成功安装
pip -v
二.
在pip解压目录下启动cmd窗口,或者将pip解压目录添加到path环境变量中,在cmd窗口中运行以下安装代码:
代码语言:javascript复制pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python
以上测试在Python中成功安装并配置openCV
三.
cv2.imread()
读入图像
import numpy as np
import cv2
img=cv2.imread('cat.png',0)
print(img)
方法有两个参数 args[0]:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。 args[1]:以灰度模式读入图像
四.
cv2.imshow()
显示图像
import numpy as np
import cv2
img=cv2.imread('cat.png',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey()
若传入的参数为0,则那它将会无限期的等待键盘输入。
cv2.destroyAllWindows()
可以删除任何我们建立的窗口。如果你想删除特定的窗口可以使用cv2.destroyWindow(),在括号内输入你想删除的窗口名。
五.
cv2.imwrite()
保存图像
按键盘s
,保存图片
import numpy as np
import cv2
img=cv2.imread('cat.png',0)
cv2.imshow('image',img)
k=cv2.waitKey(0)
if k==27:
cv2.destroyAllWindows()
elif f==ord('s'):
cv2.imwrite('cat_copy.png',img)
cv2.destroyAllWindows()
如果你用的是64 位系统,你需要将 k = cv2.waitKey(0) 这行改成k =cv2.waitKey(0)&0xFF。
六.
Matplotib 是python 的一个绘图库,里头有各种各样的绘图方法。你可以学习怎样用Matplotib 显示图像。你可以放大图像,保存它等等.
代码语言:javascript复制import numpy as np
import cv2
from matplotlib import pyplot as plt
img=cv2.imread('cat.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])
plt.show()
七.
用摄像头捕获视频,我们经常需要使用摄像头捕获实时图像。OpenCV 为这中应用提供了一个 非常简单的接口。让我们使用摄像头来捕获一段视频,并把它转换成灰度视频 显示出来。
代码语言:javascript复制import numpy as np
import cv2
cap=cv2.VideoCapture(0)
while(True):
ret,frame =cap.read()
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1)&0xFF==ord('q'):
break
cap.release()
cv2.destroyAllWindows()
按 ’ q ’ 退出运行,同时关闭摄像头。
八.
从文件中播放视频 : 与从摄像头中捕获一样,你只需要把设备索引号改成视频文件的名字。在 播放每一帧时,使用cv2.waiKey() 设置适当的持续时间。如果设置的太低视频就会播放的非常快,如果设置的太高就会播放的很慢(你可以使用这种方法控制视频的播放速度)。通常情况下25 毫秒就可以了。
代码语言:javascript复制import numpy as np
import cv2
cap=cv2.VideoCapture('filename.mp4')
while(True):
ret , frame = cap.read()
gray = cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) &0xFF ==ord('q'):
break
cap.release()
cv2.destroyAllWindows()
九.
在我们捕获视频,并对每一帧都进行加工之后我们想要保存这个视频。对于图片来时很简单只需要使用cv2.imwrite()
。
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
fourcc=cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.flip(frame,1)
if ret:
out.write(frame)
cv2.imshow('frame',frame)
else:
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
十.
OpenCV 中的绘图函数
- cv2.line()
- cv2.circle()
- cv2.rectangle()
- cv2.ellipse()
- cv2.putText()
画线:要画一条线,你只需要告诉函数这条线的起点和终点。
代码语言:javascript复制import numpy as np
import cv2
img=np.zeros((512,512,3), np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
画矩形:要画一个矩形,你需要告诉函数的左上角顶点和右下角顶点的坐标。
代码语言:javascript复制cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
画圆:要画圆的话,只需要指定圆形的中心点坐标和半径大小。
代码语言:javascript复制cv2.circle(img,(447,63), 63, (0,0,255), -1)
画椭圆:画椭圆比较复杂,我们要多输入几个参数。一个参数是中心点的位置坐标。下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演顺时针方向起始的角度和结束角度,如果是0 很360,就是整个椭圆。
画多边形:画多边形,需要指点每个顶点的坐标。用这些点的坐标构建一个大小等于行数X1X2 的数组,行数就是点的数目。
代码语言:javascript复制pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
最后得到下面的代码及图片
代码语言:javascript复制import numpy as np
import cv2
img=np.zeros((512,512,3), np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.circle(img,(447,63), 63, (0,0,255), -1)
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
十一:
在图片上添加文字
代码语言:javascript复制import numpy as np
import cv2
img=np.zeros((512,512,3), np.uint8)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
十二:
把鼠标当画笔:cv2.setMouseCallback()
双击画圆
import numpy as np
import cv2
def draw_circle(event,x,y,flags,param):
if event==cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),100,(255,0,0),-1)
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
cv2.imshow('image',img)
if cv2.waitKey(20)&0xFF==27:
break
cv2.destroyAllWindows()
根据我们选择的模式在拖动鼠标时绘制矩形或者是圆圈
代码语言:javascript复制import cv2
import numpy as np
drawing=False
mode=True
ix,iy=-1,-1
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing,mode
if event==cv2.EVENT_LBUTTONDOWN:
drawing=True
ix,iy=x,y
elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
if drawing==True:
if mode==True:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
cv2.circle(img,(x,y),3,(0,0,255),-1)
elif event==cv2.EVENT_LBUTTONUP:
drawing==False
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)&0xFF
if k==ord('m'):
mode=not mode
elif k==27:
break
未完待续…
附上参考openCV-Python中文文档下载地址:https://linux.linuxidc.com/index.php?folder=MjAxNcTq18rBzy841MIvOcjV