Raspberry Pi在运行OpenCV时变得没有响应

时间:2013-01-08 18:04:19

标签: image-processing opencv webcam raspberry-pi

我已经在我的Raspberry Pi上成功安装了OpenCV,并且一直在使用一些简单的网络摄像头流,实时的边缘检测等等,都使用基本的C和C ++代码。

然而,我遇到了我正在使用的两个网络摄像头的问题。第一个,一个非常基本的,便宜的Logitech我坐在那里,工作正常,但图像质量留下了很多不足之处。但是当我切换到我的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;它可以简单地用更好质量的相机来处理流吗?

3 个答案:

答案 0 :(得分:1)

我认为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)操作系统。

答案 1 :(得分:0)

Raspberry Pi上有known issues个摄像头,可以直接进行USB处理。您可以尝试升级到最新的内核,但到目前为止大多数修复程序都没有影响相机。

答案 2 :(得分:0)

原因可能是您的相机汲取更多电流,使Raspberry Pi无法响应。检查相机的当前额定值,并尝试使用额定电流不大于100 mA的相机。