OpenCv+cascade 进行图像识别——python
发布时间
阅读量:
阅读量
1.传入XML文件建立模型
import cv2
face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
2.载入图片
传入为BGR图,转为Grey图后进行识别;
#识别模型
img = cv2.imread("photo.jpg") #不传入参数 默认1
grey_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将BGR转为gray
#cascade XML model
3.参数
得到的face为numpyarray,为监测到的左上角坐标与宽高参数;
#numpy_array
faces = face_cascade.detectMultiScale(grey_img,
scaleFactor=1.05,#每次放大1.05去找更大的face 越接近1,每次寻找约精确
minNeighbors=5) #每次找5个neighbor
4.在图像上画出方框
cv2.rectangle(img,顶点1(,),顶点2(,),颜色,宽度)
#print(faces) #给出左上角的点坐标,以及长款
for x,y,w,h in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3) #rectangle(图像,(左上角x,左上角y),(右下角x,右下角y),(B,G,R),矩形宽度)
resized=cv2.resize(img,(int(img.shape[1]/2),int(img.shape[0]/2)))
5.显示图像or保存图像
#cv2.imshow("Gray",grey_img)
cv2.imshow("face",resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
完整代码
import cv2
face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
#识别模型
img = cv2.imread("photo.jpg") #不传入参数 默认1
grey_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将BGR转为gray
#cascade XML model
#numpy_array
faces = face_cascade.detectMultiScale(grey_img,
scaleFactor=1.05,#每次放大1.05去找更大的face 越接近1,每次寻找约精确
minNeighbors=5) #每次找5个neighbor
#print(faces) #给出左上角的点坐标,以及长款
for x,y,w,h in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3) #rectangle(图像,(左上角x,左上角y),(右下角x,右下角y),(B,G,R),矩形宽度)
resized=cv2.resize(img,(int(img.shape[1]/2),int(img.shape[0]/2)))
#cv2.imshow("Gray",grey_img)
cv2.imshow("face",resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCv对摄像头进行实时获取
1.控制摄像头
0为摄像头编号;
import cv2,time #加入time 延时camera
video=cv2.VideoCapture(0) #number 表示camera
通过check变量可以获取摄像头运行状态,当其值为true时表明正在捕获画面。
视频对象read()方法获取的是当前捕获的画面。
其中frame变量存储的是一个OpenCV中的BGR像素数组。
惯用语转换:将BGR图像转换为灰度图像。
显示操作:通过imshow函数显示图像。
刷新频率:设置waitKey=1ms使得每毫秒更新一次画面。
if key == ord(‘q’)
若按q则退出循环;
while True:
check, frame = video.read() #最开始的一帧
print(check)
print(frame)
#time.sleep(3)
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #把frame变为灰度图
cv2.imshow("capturing",gray)
key=cv2.waitKey(1) #每个n ms 换图
#先wait 再release
#用while循环实现对视频的捕捉
if key == ord('q'): #输入q则退出
break
3.结束捕捉
释放摄像头;
关闭图片窗口;
video.release()
cv2.destroyAllWindows()
全部评论 (0)
还没有任何评论哟~
