gpt4 book ai didi

c++ - OpenCV 在一帧中显示一式三份的图像

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:44 25 4
gpt4 key购买 nike

我正在尝试构建一个应用程序来简单地获取、保存和显示来 self 的相机 DMK 41BU02 的一些帧(您可以在以下链接中查阅设备的规范:datasheet)

我的代码就这么简单:

#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int, char**)
{
String path="~/proof.jpg";
VideoCapture cap(1); // /dev/video0 is the integrated webcam of my laptop, while /dev/video1 is the DMK41BU02 camera
cvNamedWindow( "Video", CV_WINDOW_AUTOSIZE );
if(!cap.isOpened()) // check if we succeeded
return -1;

Mat frame;
cap >> frame;
imwrite(path, frame);
imshow("Video", frame);
waitkey(0);

return 0;
}

代码编译和执行没有任何问题,但是当图像显示在窗口上或保存在 jpg 文件中时出现错误,因为我得到类似下面的 jpg,其中图像 triplicate 在框架中:

Resulting image of the code shown above

需要注意的几个方面:

  1. 代码正常执行,工作时返回正常图片使用笔记本电脑的集成网络摄像头。
  2. DMK41BU02 摄像头正常工作,并在使用其他应用程序(例如 fswebcam 或 VLC)时返回正常图像。
  3. 相机数据表说它与 OpenCV 兼容。
  4. 我还尝试了无限循环的代码,因为我知道抓取的第一帧可能是空白的或有某种类型的错误,但问题仍然存在。
  5. 我在安装相机驱动程序时遇到了一些问题,但我认为它们都已解决。
  6. 膝上型电脑是一台安装了 Ubuntu 的 32 位机器。在这里你可以看到 uname -a 的输出: Linux AsusPC 3.11.0-18-generic#32~precise1-Ubuntu SMP Thu Feb 20 17:54:21 UTC 2014 i686 i686 i386 GNU/Linux

我不知道如何调试这个问题,当然,我也不知道错误可能出在哪里。你能给我一些提示吗?

非常感谢。



更新:我忘记在程序开始时发布应用程序在终端中写入的奇怪输出:

VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
libv4l2: error set_fmt gave us a different result then try_fmt!
HIGHGUI ERROR: libv4l unable convert to requested pixfmt
libv4l2: error set_fmt gave us a different result then try_fmt!
init done
opengl support available

最佳答案

我遇到了完全相同的问题。问题出在 openCV 本身,或者更多; cap_v4l.hpp(在 highgui 模块中)和 cap_libv4l.hpp 是如何实现的。

这里的问题是 OpenCV 显然使用了错误的视频类型或 channel 类型来读取数据。尝试在 opencv 库中使用不同类型(yuyv 变体等)。

出于某种神奇的原因,cap_v4l.hpp 是 opencv 实际使用的代码,cap_lib4l 中的代码未被使用,但似乎支持更多视频格式(它可以切换,我不确定) .

切换这些文件并重新编译 opencv 确实对我有所改进。

关于c++ - OpenCV 在一帧中显示一式三份的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22488628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com