【发布时间】:2017-02-27 15:16:24
【问题描述】:
我正在尝试使用 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 之前的最后一行应该使得按下退出键关闭程序,但由于某种原因它会导致程序自动关闭。有什么建议吗?
这是我遇到的错误的示例
损坏的 JPEG 数据:标记 0xd6 之前的 10 个无关字节
损坏的 JPEG 数据:标记 0xd3 之前的 6 个无关字节
损坏的 JPEG 数据:标记 0xd0 之前的 2 个无关字节
损坏的 JPEG 数据:标记 0xd3 之前的 6 个无关字节
损坏的 JPEG 数据:标记 0xd3 之前的 2 个无关字节
损坏的 JPEG 数据:标记 0xd6 之前的 4 个无关字节
这是我使用的编译命令,以防它是编译时问题,但我非常怀疑。最好覆盖我所有的基地
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
感谢您的帮助!
【问题讨论】:
-
尝试用
cv::waitKey(1) != 27替换while条件中的1 -
@slawekwin 这行得通,谢谢!您能否将此添加为答案,以便获得一些荣誉(也许是解释)?