opencv是一个开源计算机视觉库,安装非常简单,WIN+R启动cmd后直接使用pip安装,我用的是python3.6
pip install opencv-python
最近在忙于某个比赛项目中,需要用到图像识别,首先想到的就是使用python。python的特点我就不说了,主要是考虑到其的简洁和庞大的第三方库。
这是opencv的文档:https://opencv.org
1.打开摄像头拍下我们的帅照:
import cv2 #导入opencv库
cap=cv2.VideoCapture(0) #打开电脑的摄像头
i=50
while i:
ret,frame=cap.read() #读取一帧
cv2.imwrite("image.jpg",frame) #写进文件
cv2.imshow("image",frame) #显示写进文件的帧
cv2.waitKey(1) #等待
i-=1
cap.release() #释放摄像头
这就是opencv调用自己的电脑摄像头,如果用USB连接的外部摄像头可以把摄像头的语句变为:
cap=cv2.VideoCapture(1)
2.简单处理图片
这里我从网上直接搜索得到的苹果图片,把图片读进去后做简单的处理,最后用一个圆把苹果圈出来。
import cv2
import numpy as np
img=cv2.imread("test.jpg") #读取图片
cv2.imshow("test",img) #显示图片
#BGR
upper=np.array([124,255,255]) #BGR上限
lower=np.array([20,20,100]) #BGR下限
cv2.waitKey(0) #一直等待
在这里要注意一下,在opencv中,并不是颜色不是RGB顺序的,而是BGR。
src=cv2.inRange(img,lower,upper) #在图片中找到介于lower和upper的像素点
cv2.imshow("src",src)
这里是:lower<(BGR)<upper
找出轮廓:
#列表中第二个元素是所有轮廓
contours=cv2.findContours(src,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
#在原图上画出轮廓
cv2.drawContours(img,contours,-1,(255,0,0),3)
cv2.imshow("test",img)
找到最大的轮廓,然后画出内接圆:
#找到最大的轮廓
cnt=max(contours,key=cv2.contourArea)
#返回圆心,和半径
((x,y),radius)=cv2.minEnclosingCircle(cnt)
#画出圆
cv2.circle(img,(int(x),int(y)),int(radius),(0,255,0),2)
cv2.imshow("test",img)