我已经在我的 Raspberry Pi 上成功安装了 OpenCV,并且一直在玩弄一些简单的网络摄像头流、实时 canny-edge 检测等等,所有这些都使用基本的 C 和 C++ 代码。
但是,我在使用两个网络摄像头时遇到了问题。第一个,我身边有一个非常基本的,便宜的罗技,工作正常,但图像质量还有很多不足之处。但是当我切换到我的 Logitech 510c 相机时,图像好多了,但是 Pi 卡住了。
相反,流式传输程序继续正常运行,但我无法退出该程序 - Raspberry Pi 停止响应键盘和鼠标,退出的唯一方法是拔下 Raspberry Pi。下面是一些代码的示例:
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
int main(){
int c, i, j;
//Capture frame from camera
CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY);
if(!capture){
fprintf(stderr, "Error: capture is NULL \n");
getchar();
return -1;
}
//Set resolution of capture
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 256);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 192);
//Create window for display
cvNamedWindow("canny");
while(true){
//Find/mark edges using canny
IplImage* frame = cvQueryFrame(capture);
IplImage* grey = cvCreateImage(cvGetSize(frame), 8, 1);
cvCvtColor(frame, grey, CV_RGB2GRAY);
IplImage* frame2 = cvCreateImage(cvSize(grey->width+6, grey->height+6), grey->depth, grey->nChannels);
CvPoint offset = cvPoint(3,3);
cvCopyMakeBorder(grey, frame2, offset, IPL_BORDER_REPLICATE, cvScalarAll(0));
IplImage* edges = cvCreateImage(cvGetSize(frame2), IPL_DEPTH_8U, frame2->nChannels);
cvCanny(frame2, edges, 4900, 39200, 7);
cvShowImage("canny", edges);
//Wait for a keypress
int c = cvWaitKey(10);
if (c!=-1)
break;
} //End while
cvReleaseCapture (&capture);
cvDestroyWindow("canny");
return 0;
} //End main
我的代码有问题吗?我需要使用不同的网络摄像头吗?我超频了 Raspberry Pi;难道它不能用更好质量的相机处理流吗?
最佳答案
我认为 Raspberry Pi 将其 USB 端口上的电流限制在 700 mA,因此如果您的相机在 700 mA 或更低的电流下工作,它应该可以正常工作。如果没有,您应该购买有源 USB 集线器。我有一台额定电流为 700 mA 的罗技 C170 相机,它在没有供电的 USB 集线器的情况下也能正常工作。
我想知道您是如何在您的 Raspberry Pi 上安装 OpenCV 的,以便您可以将它与 C/C++ 一起使用,如果您使用 IDE 来制作程序,我也想知道您是如何做到的。我已经搜索了如何执行此操作的教程,但我只找到了如何安装 OpenCV 以将其与 Python 一起使用的教程。我需要用C/C++,因为我试过Python,我觉得它对图像处理真的很慢。我使用的是 Debian 6.0 (Squeeze) 操作系统。
关于image-processing - Raspberry Pi 在运行 OpenCV 时变得无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221274/