2

次のコードを使用して、画像を取得して画面に表示できるグラバーがあります

while((lastPicNr = Fg_getLastPicNumberBlockingEx(fg,lastPicNr+1,0,10,_memoryAllc))<200) {                                                           
                iPtr=(unsigned char*)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc);                  
                ::DrawBuffer(nId,iPtr,lastPicNr,"testing");                                         }

しかし、画像データへのポインターを使用してOpenCVで表示したいので、ピクセルで処理を行う必要があります。私のカメラは CCD モノカメラで、ピクセルの深度は 8 ビットです。私はOpenCVを初めて使用します。opencvに (unsigned char*)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc); の戻り値を取得できるオプションはありますか? 画面に表示しますか?または iPtr ポインターからデータを取得して、画像データを使用できるようにしますか?

4

2 に答える 2

5

IplImagefromを作成するには、次のunsigned char* raw_data2 つの重要な指示が必要です:cvCreateImageHeader()cvSetData():

// 1 channel for mono camera, and for RGB would be 3
int channels = 1; 
IplImage* cv_image = cvCreateImageHeader(cvSize(width,height), IPL_DEPTH_8U, channels);
if (!cv_image)
{
    // print error, failed to allocate image!
}

cvSetData(cv_image, raw_data, cv_image->widthStep);

cvNamedWindow("win1", CV_WINDOW_AUTOSIZE);
cvShowImage("win1", cv_image);
cvWaitKey(10);

// release resources
cvReleaseImageHeader(&cv_image);
cvDestroyWindow("win1");

私はコードをテストしていませんが、探しているコードのロードマップはそこにあります。

于 2012-04-12T14:11:20.323 に答える
2

C++ を使用している場合、次のような単純な方法で実行しない理由がわかりません。

カメラがサポートされている場合は、次のようにします。

   cv::VideoCapture capture(0);

   if(!capture.isOpened()) {
     // print error
     return -1;
   }

   cv::namedWindow("viewer");

   cv::Mat frame;

   while( true )
   {
     capture >> frame;

     // ... processing here

     cv::imshow("viewer", frame);
     int c = cv::waitKey(10);
     if( (char)c == 'c' ) { break; } // press c to quit
   }

ここにあるドキュメントとチュートリアルを読み始めることをお勧めします

于 2012-04-12T14:28:08.950 に答える