1

首先我的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 相机工作正常

更新: 我没有找到根本问题,但确实有一个对我来说足够好的解决方法(至少目前如此)。

  1. 运行 mjpg-streamer。在我的例子中,网络摄像头在 http://localhost:8083/?action=stream

  2. 从 URL 而非 USB 设备编号捕获视频。

  3. 修改代码以继续抓取图像

导入简历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("打开采集设备失败")

4

0 回答 0