c++ - OpenCV 罗技 p270 提供损坏的数据

标签 c++ opencv

我正在尝试使用 OpenCV 使用 p270 相机进行边缘检测,当我可以让它打开我的网络摄像头时,它收到的所有数据都已损坏。目前我的代码非常简单,只是想开始,但这让我很头疼。这是我的代码:

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
//#include <opencv\cv.h>
//#include <opencv\highgui.h>
#include <iostream>
using namespace cv;

//Mat src, src_gray;
//Mat dst, detected_edges;

int main() {
       VideoCapture capture(1);
       if(!capture.isOpened()) {
               printf("Camera failed to initialize\n");
               return 1;
       };
       Mat src, src_gray;
       Mat detected_edges;
       while(1) {
               capture >> src;
               //cvtColor(src, src_gray, CV_BGR2GRAY);
               //Canny(src_gray, detected_edges, 20, 60, 3);
               imshow("Source", src);
               //imshow("Gray Edges", detected_edges);

               //if(waitKey(10) >= 0) break;
       };

       return 0;
};

此外,return 之前的最后一行应该使按退出键关闭程序,但由于某种原因它会导致程序自动关闭。有什么建议吗?

这是我遇到的错误示例

Corrupt JPEG data: 10 extraneous bytes before marker 0xd6

Corrupt JPEG data: 6 extraneous bytes before marker 0xd3

Corrupt JPEG data: 2 extraneous bytes before marker 0xd0

Corrupt JPEG data: 6 extraneous bytes before marker 0xd3

Corrupt JPEG data: 2 extraneous bytes before marker 0xd3

Corrupt JPEG data: 4 extraneous bytes before marker 0xd6

这是我使用的编译命令,以防它是一个编译时问题,但我对此非常怀疑。最好涵盖我所有的基础

g++ -o edge edge_detection.cpp $(pkg-config opencv --cflags --libs)

如果有人能提供帮助,我将不胜感激。

我已经尝试用我的标准笔记本电脑网络摄像头运行它,虽然我没有收到损坏的 jpeg 数据错误,但我只得到以下两行输出,然后是应该保存来自的数据的窗口网络摄像头超时。

init done
opengl support available

通过让它从网络摄像头获取第一个图像帧然后进入休眠状态,我确定代码实际上至少为第一个图像获取了有效的图像数据。也许有一种方法可以隔开获取图像的频率,这样它就不会发送持续的信息。不过,我不明白为什么它不能处理不断输入的信息。这非常令人沮丧。

我尝试过的事情

如您所见,我已经从代码中删除了几乎所有不需要的东西,但没有任何效果。

我已经尝试了这个问题的所有三个答案,但没有任何帮助:Opencv Error on Ubuntu Webcam (Logitech C270) Capture -> HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

感谢您的帮助!

最佳答案

当你编写 if(waitKey(10) >= 0) break 时,你的 while 循环总是在第一次迭代后 break 因为 waitKey返回用户按下的键,如果在指定时间内没有按下任何键(在您的情况下为 10 毫秒),则返回 0。要显示您的输入,只要 waitKey 不返回您期望的 key (您说的是 escape = 27 ASCII),您就需要循环,所以请尝试:

   while (waitKey(10) != 27) {
           capture >> src;
           //cvtColor(src, src_gray, CV_BGR2GRAY);
           //Canny(src_gray, detected_edges, 20, 60, 3);
           imshow("Source", src);
           //imshow("Gray Edges", detected_edges);               
   };

只要输入流可以被解码,这就会显示您的图像。

关于c++ - OpenCV 罗技 p270 提供损坏的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42431580/

相关文章:

c++ - 调试错误 R6010

c++ - 如何正确处理光线追踪中的折射

c++ - 是否需要定义虚拟析构函数?

c++ - 为什么编译器在这个例子中选择复制构造函数来代替赋值运算符?

c++ - 使用constexpr成员函数初始化constexpr成员变量

python - 如何在Python中填充矩阵以使其大小均匀

python3 : Cannot Import cv2 : DLL load failed after installing opencv_contrib modules

opencv - 如何使用openCV确定平移和旋转矩阵

python-3.x - 计算旋转矩形区域中的非零像素数

python - 从Arduino的串行端口读取实时数据到python脚本中