首先我的opencv安装过程:
https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/
sudo apt-get install -y vim bc
#gain more SDCARD space; remove unneed software
###############################################
sudo apt-get purge -y wolfram-engine;
sudo apt-get purge -y libreoffice*;
sudo apt-get clean;
sudo apt-get autoremove -y;
###############################################
# install dependencies
###############################################
sudo apt-get install -y build-essential cmake pkg-config;
echo;echo;echo;
sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng-dev;
echo;echo;echo;
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev;
echo;echo;echo;
sudo apt-get install -y libxvidcore-dev libx264-dev;
echo;echo;echo;
sudo apt-get install -y libfontconfig1-dev libcairo2-dev;
echo;echo;echo;
sudo apt-get install -y libgdk-pixbuf2.0-dev libpango1.0-dev;
echo;echo;echo;
sudo apt-get install -y libgtk2.0-dev libgtk-3-dev;
echo;echo;echo;
sudo apt-get install -y libatlas-base-dev gfortran
echo;echo;echo;
sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libhdf5-103
echo;echo;echo;
sudo apt-get install -y libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
echo;echo;echo;
sudo apt-get install -y python3-dev
echo;echo;echo;
###############################################
# create virtual python environment (need pip, virtualenv , virtualenvwrapper)
###############################################
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
sudo rm -rf ~/.cache/pip
sudo pip install virtualenv virtualenvwrapper
#EDIT .bashrc, add to bottom:
###############################################
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
#save, exit .bashrc, reload:
###############################################
source ~/.bashrc
# now create the virtual environment (we're calling it 'cv')
###############################################
mkvirtualenv cv -p python3
###############################################
#INSTall opencv4 into 'cv' virtual environment using 'pip'
###############################################
pip install opencv-contrib-python
pip3 install matplotlib
###############################################
# I make sure I'm in the virtual env
###############################################
workon cv
###############################################
# the 'LD_PRELOAD' takes care of a startup error
###############################################
LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0 python3
接下来,这是我的python脚本:( 我已经尝试过设置宽度x高度和不设置宽度x高度)
import cv2
device = 0
cap = cv2.VideoCapture(device)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# if capture failed to open, try again
if not cap.isOpened():
cap.open(device)
# only attempt to read if it is opened
if cap.isOpened:
while(True):
ret, frame = cap.read()
if ret:
cv2.imshow('frame',frame)
else:
print("Error reading capture device")
break
if cv2.waitKey(1) & 0xff == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
else:
print("Failed to open capture device")
错误输出:
选择超时 VIDIOC_DQBUF:资源暂时不可用 读取捕获设备时出错
使用 mjpg-streamer 相机工作正常
更新: 我没有找到根本问题,但确实有一个对我来说足够好的解决方法(至少目前如此)。
运行 mjpg-streamer。在我的例子中,网络摄像头在 http://localhost:8083/?action=stream
从 URL 而非 USB 设备编号捕获视频。
修改代码以继续抓取图像
导入简历2 webcamConnected = 假 url = "http://localhost:8082/?action=stream" 上限 = cv2.VideoCapture(url) # 仅在打开时尝试读取 如果 cap.isOpened: 而(真): ret, frame = cap.read() 如果重新: cv2.imshow('帧',帧) 别的: print("读取捕获设备错误") 休息 如果 cv2.waitKey(1) & 0xff == ord('q'): 休息 帽释放() cv2.destroyAllWindows() 别的: print("打开采集设备失败")