图像处理-树莓派在运行OpenCV时变得无响应



我已经成功地在我的树莓派上安装了OpenCV,并一直在摆弄一些简单的网络摄像头流媒体,实时边缘检测等等,所有这些都使用基本的C和c++代码。

然而,我正在使用的两个网络摄像头遇到了问题。第一个,一个非常基本的,便宜的罗技,我坐在那里,工作得很好,但图像质量还有很多需要改进的地方。但当我切换到罗技(Logitech) 510c相机时,图像好多了,但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

我的代码有问题吗?我需要使用不同的网络摄像头吗?我已经超频了树莓派;难道它不能用质量更好的相机来处理流?

我认为树莓派将其USB端口的电流限制在700 mA,所以如果您的相机使用700 mA或更少,它应该可以正常工作。如果没有,你应该买一个USB集线器。我有一台罗技C170相机,额定电流为700毫安,没有USB集线器也能正常工作。

我想知道你是如何在你的树莓派上安装OpenCV的,这样你就可以用C/c++来使用它,如果你使用IDE来制作你的程序,我也想知道你是如何做到的。我已经搜索了如何做到这一点的教程,但我只找到了如何安装OpenCV以与Python一起使用它的教程。我需要使用C/c++,因为我尝试过Python,我认为它对于图像处理来说真的很慢。我使用的是Debian 6.0 (Squeeze)操作系统。

树莓派上的摄像机有一些已知的问题,归结为USB处理。您可以尝试升级到最新的内核,尽管到目前为止大多数修复都没有影响相机。

原因可能是你的相机吸收了更多的电流,导致树莓派没有响应。检查相机的电流额定值,并尝试使用电流额定值不大于100毫安的相机。

相关内容

  • 没有找到相关文章

最新更新