5

opencv2.4.3を使用してWebカメラにアクセスできません。

私のシステム:

HPProbook4530s-HP固定HDウェブカメラ

Ubuntu 12.10

OpenCV 2.4.3

内蔵カメラをキャプチャしたい場合、エラーが発生します:キャプチャがNULLです

http://opencv.willowgarage.com/wiki/CameraCaptureサンプルコードを使用しています。

サンプルコードは次のとおりです。

#include "cv.h" 
#include "highgui.h" 
#include <stdio.h>  
// A Simple Camera Capture Framework 
int main() {
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if ( !capture ) {
 fprintf( stderr, "ERROR: capture is NULL \n" );
 getchar();
 return -1;
}
// Create a window in which the captured images will be presented
cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
// Show the image captured from the camera in the window and repeat
while ( 1 ) {
 // Get one frame
 IplImage* frame = cvQueryFrame( capture );
 if ( !frame ) {
   fprintf( stderr, "ERROR: frame is null...\n" );
   getchar();
   break;
 }
 cvShowImage( "mywindow", frame );
 // Do not release the frame!
 //If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
 //remove higher bits using AND operator
 if ( (cvWaitKey(10) & 255) == 27 ) break;
}
// Release the capture device housekeeping
cvReleaseCapture( &capture );
cvDestroyWindow( "mywindow" );
return 0;
}

また、タイピング端末を使用してxawtv-hwscanを試してみました。私はこの出力を取得します:

looking for available devices
port 129-144

type : Xvideo, image scaler
name : Intel(R) Textured Video`


/dev/video0: OK    
             [ -device /dev/video0 ]
type : libv4l

name : HP HD Webcam [Fixed]

flags:  capture

次に、xawtvvideo0と入力してWebカメラにアクセスできます。ウェブカメラに問題はないと思います。opencvに問題があります。

4

3 に答える 3

6

私は数分前に問題を解決しました。そして、私は同様のエラーを処理する人々のために私の解決策を共有することにしました。

最初に、以下のパケットのいくつかをインストールしませんでした(どれを覚えていないので、すべて貼り付けます)

libjpeg62-dev

libtiff4-dev

zlib1g-dev

libjasper-dev

libavcodec-dev

libdc1394-22-dev

libgstreamer0.10-dev

libgstreamer-plugins-base0.10-dev

libavformat-dev

libv4l-dev

libswscale-dev

次に、このコードを使用してcmakeプロセスを構成する必要があります

cmake -D CMAKE_BULD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON USE_V4L=ON WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON USE_GStreamer=ON ..

このコードではUSE_V4L=ONに注意してください。

私の解決策を読んだ後、あなたが解決することを願っています。

于 2013-01-25T02:47:48.660 に答える
2
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
  VideoCapture webcam;
  webcam.open(0);

  if(!webcam.isOpened())//**EDITED**
    {
      std::cout<<"CANNOT OPEN CAM"<<std::endl;
      return -1;
    }

  Mat frame;

  while(true)
  {
    webcam >> frame;
    imshow("TEST",frame);
    waitKey(20);
  }
  return 0;
}

上記のコードを試してください...

于 2013-01-20T13:09:09.057 に答える
1

場合によっては、内蔵カメラの応答時間にかかっています (私の場合のように)。HP G62 の内蔵 Web カメラは、最初の opencv cap.read(frame) 呼び出しの後にのみ「起動」することがわかりました。したがって、カメラから肯定的な読み取りを取得するために(したがって、コードの後半でエラーが発生しないようにするため)、続行する前に数回呼び出しを行いました。

if (!cap.read(frame))
{
    if(!cap.read(frame))
    {
        if(!cap.read(frame))
        {
            if(!cap.read(frame))
            {
                 printf("Cam read error");
            }
        }
    }
}

私にとって最適なのは 4 回の読み取り呼び出しでした。これにより、コードのメイン ブロックを実行する前に、カメラが確実に起動してオンになりました。私はこれを試していませんが、単純な「waitKey」呼び出しが機能し、読み取り呼び出しが 2 つしかない可能性があります。

于 2014-12-26T11:55:37.977 に答える