- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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/
我在我的项目中添加了导入日历(ics 文件)的功能。代码是这样的: events = ICS::Event.file(File.open(ics_temp_file)) events.each
我是一名优秀的程序员,十分优秀!