我有这个代码试图从我的网络摄像头捕获一个框架覆盆子pi,并将其保存为图像.我使用opencv 2,但是当我运行代码时出现了奇怪的错误.
import time
import sys
from subprocess import call
import cv2
cam = cv2.VideoCapture()
while True:
cam.open(-1)
image = cam.read()
cv2.imwrite("current.jpeg",image)
time.sleep(10);
Run Code Online (Sandbox Code Playgroud)
您可以忽略ftp部分和注释行..这是程序返回的内容:
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
Traceback (most recent call last):
File "kvamskogen.py", line 18, in <module>
cv2.imwrite("current.jpeg",image)
TypeError: <unknown> is not a numpy array
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
我想知道我是否可以使用“opencv”在 v4l2 设备上写入。我会拍张照片,使用 opencv 的功能进行一些小的更改,然后将其发送到 v4l2 设备上。
我在网上搜索过,但是有很多关于如何从 V4L2 设备读取的示例,但我没有发现有关在 v4l2 上写入的内容。
有人能帮我吗?
我不确定为什么这个管道会中断,我已经根据网站的确切说明在 Linux 上安装了 gstreamer,有什么想法吗?
gst-launch-1.0 v4l2src device=/dev/video0 ! videoscale ! video/x-raw, width=2592, height=600 ! autovideosink -v
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
Additional debug info:
gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.000093207
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
Run Code Online (Sandbox Code Playgroud)
如果我把它改成:
gst-launch-1.0 v4l2src …Run Code Online (Sandbox Code Playgroud) 我编写了一个应用程序,它从网络摄像头读取并使用Linux上的OpenCV处理帧.现在我想将应用程序的输出传输到由V4L2loopback模块创建的虚拟网络摄像头,以便其他应用程序能够读取它.我用C编写了应用程序.我不知道如何处理这个问题.你能给我一些提示吗?
在正常的快门延迟中,传感器驱动程序将捕获的图像缓冲区提供给v4l2层,这里jpeg(硬件)标头添加了一些额外的数据(exif信息和缩略图),并且该层使图像缓冲区预览堆(在HAL层中)以进行进一步处理.但是在零快门滞后的情况下拍摄照片的过程是什么.这与正常的快门滞后相同吗?如何缩短拍照和图像处理之间的时间.如果不是解释.
我喜欢运行一个像这样快照凸轮的cron:
* 9-17 * * 1-5 vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path /home/foo/tmp/cam --scene-prefix snapshot --scene-format png vlc://quit --run-time=1
Run Code Online (Sandbox Code Playgroud)
但是当cron运行它时会抛出一个我不明白的错误:
** Message:
Failed to get session bus:
Error spawning command line 'dbus-launch --autolaunch=55644972b3c91c1d24d83d8252721f00 --binary-syntax --close-stderr':
Child process exited with code 1
Run Code Online (Sandbox Code Playgroud)
在网络上,我发现没有干净或良好的文档.你能帮我解决一下吗?
我正在使用通过 LVDS 连接到 i.MX6 Quad 的 CSI 接口的 Aptina MT9V024 传感器。我在快照模式下运行传感器,即使用外部信号触发/开始图像捕获。
在软件方面,我正在运行 Yocto Linux 和一个用 C 编写的应用程序,它应该检索捕获的图像数据。
它是这样工作的(部分代码,循环运行):
// wait until camers is triggered
ret = select(video_fd + 1, &fds, NULL, NULL, &tv);
// dq buffer / read image data and save to disk
ret = xioctl(video_fd, VIDIOC_DQBUF, &v4l2buf);
img->imageData = buffers[v4l2buf.index].start;
cvSaveImage(filename, img, 0);
// enqueue another buffer to capture next frame
ret = xioctl(video_fd, VIDIOC_QBUF, &v4l2buf);
Run Code Online (Sandbox Code Playgroud)
调用select(...)阻塞直到新帧可用,即相机被触发。
我的问题:检索到的图像是上一次捕获的图像。在 init 期间,我请求两个缓冲区,因为传感器不会从更少开始。但是在 select(...) 返回后,我不能 DQBUF …
我正在开发一个 openCV 项目,我有一个稳定运行的变体,它从 HDMI 采集卡获取输入并使用 FFmpeg 输出到 v4L2 环回设备 (/dev/video0) 我的 openCV 项目从 /dev/video0 获取输入.
当我尝试使用 rtsp 提要时出现问题,以下命令可将提要发送到我的环回设备:
ffmpeg -rtsp_transport tcp -i rtsp://@192.168.1.27:552//stream1 -acodec rawvideo -vcodec rawvideo -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)
而且我可以使用 VLC(在 /dev/video0 上)查看该提要没问题,但是当我将其提供给我的 openCV 应用程序时,出现以下错误:
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Run Code Online (Sandbox Code Playgroud)
当我v4l2-ctl -d /dev/video0 --all在工作和非工作变体上运行时,这就是我得到的:
工作输出
Format Video Output:
Width/Height : 1920/1080
Pixel Format : 'UYVY'
Field : None
Bytes per Line : 3840
Size Image : 4147200
Colorspace : sRGB …Run Code Online (Sandbox Code Playgroud) 使用 iTerm,我通过 SSH 连接到我的 raspberry pi (raspbian) 来控制我设置的家庭安全系统。
我需要改变相机的焦点,所以我v4l2-ctl -c focus_absolute=0在我的终端上运行。
我已经这样做了几个星期,它没有给我任何问题。今天,在运行命令时,我开始收到以下错误:
VIDIOC_S_EXT_CTRLS: failed: Invalid or incomplete multibyte or wide character
focus_absolute: Invalid or incomplete multibyte or wide character
Run Code Online (Sandbox Code Playgroud)
什么可能导致它突然抛出这个错误?我一直在运行完全相同的命令数周没有问题。