目前,我已经用Python实现了我的应用程序,可以通过USB读取相机帧。我使用Opencv,但对于分辨率为60fps和1920x1080的相机,我无法以这种速度捕捉图像。我尝试了一些东西:cv2。视频捕获(0,cv2.CAP_FFMPEG),但我无法捕获帧(捕获读取返回False)。请您提出任何解决方案或方法来提高整体速度,甚至在GPU中处理它们。
# Opencv 3.4.9 & Python 3.6.9
import cv2
capture = cv2.VideoCapture(0, cv2.CAP_FFMPEG)
while True:
ret, frame = capture.read()
if ret:
cv2.imshow('Demo', frame)
cv2.waitKey(1)
Opencv是从以下源代码构建的:
#!/usr/bin/env bash
set -e
VERSION='3.4.9'
DOWNLOAD_URL="https://github.com/opencv/opencv/archive/${VERSION}.zip"
CONTRIB_DOWNLOAD_URL="https://github.com/opencv/opencv_contrib/archive/${VERSION}.zip"
CURRENT_DIR="$(pwd)"
config_opencv_with_cuda() {
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_opencv_cnn_3dobj=OFF \
-D BUILD_opencv_dnn_modern=OFF \
-D OPENCV_EXTRA_MODULES_PATH=$CURRENT_DIR/opencv_contrib-$VERSION/modules \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_EXAMPLES=OFF ..
}
echo 'Uninstalling pip installation'
pip3 uninstall opencv-python opencv-contrib-python
echo 'Installing dependencies'
apt-get update && apt-get install -y \
build-essential cmake pkg-config \
libjpeg-dev libtiff5-dev libpng12-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libxvidcore-dev libx264-dev \
libgtk2.0-dev libgtk-3-dev \
gfortran
wget -O opencv.zip "${DOWNLOAD_URL}"
wget -O opencv_contrib.zip "${CONTRIB_DOWNLOAD_URL}"
unzip opencv.zip && unzip opencv_contrib.zip
cd opencv-$VERSION
mkdir build
cd build
if [[ -d /usr/local/cuda ]]; then
config_opencv_with_cuda
else
config_opencv_without_cuda
fi
make -j $(nproc)
make install
ldconfig
无法捕获此速度的原因是VideoCapture
在读取、解码和返回下一帧时阻塞了应用程序。
如果我没弄错的话,你正在从你的USB读取电影文件。
您可以使用FileVideoStream
对象来加速帧FileVideoStream
使用队列
结构进行读取、解码和返回。因此,在处理过程中不会阻止应用程序。
您需要安装imutils
pip安装imutils
conda安装-c conda forge imutils
示例用法:
import cv2
from imutils.video import FileVideoStream as Fvs
fvs = Fvs(path="usb.mp4").start()
four_cc = cv2.VideoWriter_fourcc(*"mp4v")
writer = cv2.VideoWriter("out.mp4", four_cc, 60,
(1920, 1080), isColor=True)
while True:
frame = fvs.read()
# You write your processing code below here
# If you are sure each usb frame size is (1920, 1080) comment the below state.
frame = cv2.resize(frame, (1920, 1080))
writer.write(frame)
cv2.imshow("out", frame)
if cv2.waitKey(0) & 0xFF == ord("q"):
break
cv2.destroyAllWindows()
fvs.stop()
writer.release()
问题内容: 如何使用Python API使用OpenCV一次(或几乎)捕获两个或更多摄像机的视频? 我有三个可以进行视频流传输的网络摄像头,分别位于/ dev / video0,/ dev / video1和/ dev / video2。 以本教程为例,从单个摄像机捕获图像很简单: 这很好。 但是,如果我尝试初始化第二台相机,则尝试从它返回None: 为了确保我不会意外给OpenCV一个不好的相机
本文向大家介绍opencv实现读取视频保存视频,包括了opencv实现读取视频保存视频的使用技巧和注意事项,需要的朋友参考一下 不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的 有几
主要内容:第1步:加载OpenCV本机库,第2步:实例化视频捕获类,第3步:阅取帧,示例在本章中,我们将学习如何使用OpenCV使用系统摄像头捕获帧。包中的类包含使用相机捕获视频的类和方法。下面来一步一步学习如何捕捉帧 - 第1步:加载OpenCV本机库 在使用OpenCV库编写Java代码时,使用加载OpenCV本地库。加载OpenCV本机库,如下所示 - 第2步:实例化视频捕获类 使用本教程前面提到的函数来实例化类。 第3步:阅取帧 可以使用类的方法从相机读取帧。此方法接受类的对
我计划用网络摄像机捕捉视频,然后用opencv处理,最后在google原生客户端环境下用opencv naclport在网页上显示输出 我现在意识到的是 使用javascript中的MediaStreamTrack接口和 然后 将其编码为Base64字符串并发送到c模块以使用opencv进行处理, 在cpp模块中,将其解码回Mat图像并进行处理,最后将其发送回浏览器进行显示。 所以我想知道,在op
在使用Python的OpenCV中,当网络摄像头的fps和目录中的视频文件相同时,为什么视频文件以快进播放,而网络摄像头继续以正常速率显示帧?cv2扮演什么角色。waitKey()函数在此处播放
问题内容: 如何访问我的IP摄像机流? 用于显示标准网络摄像头流的代码是 除了IP摄像机,我该如何做同样的事情? 我的系统: Python 2.7.14 OpenCV 2.4.9 Teledyne Dalsa Genie Nano XL相机 帮助将不胜感激 您可以将视频捕获对象用作 问题答案: 我回答了我自己的问题,报告了什么似乎是Python OpenCV中访问IP摄像机的 最全面的 总体过程。