问题
今天使用OpenCV的imshow方法预览摄像头捕捉的图像时,出现了显示窗口不弹出的问题,最后通过安装matplotlib库解决的。
使用的代码
import cv2
import os
# 调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2
def facecollect():
cap = cv2.VideoCapture(0)
face_detector = cv2.CascadeClassifier('/home/lmx/anaconda3/envs/人脸识别实验/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml') # 分类器地址
while True:
sucess, img = cap.read()
faces = face_detector.detectMultiScale(img,scaleFactor=1.2,
minNeighbors=5,minSize=(32, 32))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('image', img)
# 保持画面的持续。
k = cv2.waitKey(1)
if k == 27: # 通过esc键退出摄像
break
# 关闭摄像头
cap.release()
cv2.destroyAllWindows()
facecollect()
解决过程
一开始运行代码保持着循环但没有图像窗口,以为是我的Ubuntu系统的摄像头驱动问题。搞了一下,安装了一下cheese,测试一看摄像头没有问题可以用。这问题不就变成了摄像头可以用只是没有图像窗口,因此我就百度了一下,结果搜到的解答全是解决怎样保持窗口的(用cv2.waitKey(0)保持窗口不一闪而过)这可难搞喽,我这压根没窗口好吧!
最后我搜了一下OpenCV-python的依赖包 Numpy Matplotlib Cmake等等,当我看到Matplotlib库时我猜测可能就是它没装,因为我知道这个库是一个绘图的库可以产生GUI。我看了下自己的环境pip list 诶还真没有,最后装上这个库解决了这个问题。