1

ほぼ 2 日間、インターネットで解決策を検索してきましたが、見つけたものが私のコンピューターでは機能しないようです。

私が使用しているもの:

  • Matrox Vio DUO
  • OpenCV 2.4.5
  • MIL-lite
  • Ubuntu 10.04

ここにある cvcap_mil.cpp ファイルは既に試しました。

このコードは私のプロジェクトでも機能しません:

   IplImage* rgb_frame;
   rgb_frame = cvCreateImage(cvSize(w,h), IPL_DEPTH_8U, 3 );
   MilImage = MbufAllocColor(MilSystem, 3, w, h,8+M_UNSIGNED,M_IMAGE + M_GRAB,M_NULL);
   MbufGetColor(MilImage, M_BGR24+M_PACKED, M_ALL_BAND, (void*)(rgb_frame->imageData));
   rgb_frame->origin = IPL_ORIGIN_BL;
   cvFlip(rgb_frame,rgb_frame,0);

それを行う方法はありますか?

PS : Matrox Vio カードは正常に動作しています。

編集:白黒画像を取得する方法を見つけました。興味のある人のための解決策は次のとおりです。

MIL_ID MilApplication, /* Application identifier */
MilSystem, /* System identifier */
MilDigitizer, /* Digitizer identifier */
MilImageRGB, /* RGB Buffer */
MilImage1Child, /* R child */
MilImage2Child, /* G child */
MilImage3Child; /* B child */

//init
MappAlloc(M_DEFAULT,&MilApplication);
MsysAlloc(M_SYSTEM_VIO,M_DEFAULT,M_DEFAULT,&MilSystem);

MdigAlloc(MilSystem,M_DEFAULT,MIL_TEXT("M_DEFAULT"),M_DEFAULT,&MilDigitizer);

/*get width & height of cam*/
long width = MdigInquire(MilDigitizer,M_SIZE_X,M_NULL);
long height = MdigInquire(MilDigitizer,M_SIZE_Y,M_NULL);
MbufAllocColor(MilSystem,3,width,height,8+M_UNSIGNED,M_IMAGE+M_GRAB+M_PROC+M_DISP,&MilImageRGB); /*Erster Buffer*/

/*first Child (r channel)*/

MbufChildColor2d(MilImageRGB,M_RED, 0, 0, width , height ,&MilImage1Child);
MbufChildColor2d(MilImageRGB,M_GREEN, 0, 0, width , height ,&MilImage2Child); /*second Child (g channel)*/
MbufChildColor2d(MilImageRGB,M_BLUE, 0, 0, width , height ,&MilImage3Child); /*third Child (b channel)*/
IplImage *pIplImgProcessed = cvCreateImage ( cvSize ( width,height ), 8,1 );

/* get one image */
MdigGrab(MilDigitizer, MilImageRGB);


/*copy first child to buffer*/
MbufGet ( MilImage1Child, pIplImgProcessed->imageData );



// Visualise in a Qt label
Mat src(pIplImgProcessed);
QImage qImage = Mat2QImage(src);
QPixmap pixmap = QPixmap::fromImage(qImage);
ui->label_2->clear();
ui->label_2->setPixmap(pixmap.scaled(ui->label_2->size()));


//release
MdigFree(MilDigitizer);
MbufFree(MilImage1Child);
MbufFree(MilImage2Child);
MbufFree(MilImage3Child);
MbufFree(MilImageRGB);
MsysFree(MilSystem);
MappFree(MilApplication);

ご協力ありがとうございました。ティボー。

4

2 に答える 2

0

ここでは、確認する必要があるいくつかの事項を示します。

  1. cvCreateImage は本当に BGR24+Packed buffer を期待していますか? 多分それはBGR32+PackedまたはBGR24+Planarです...私はEmguCVを使用しているので、OpenCVでこの機能に慣れていません。
  2. MbufGetColor() で取得したデータのピッチが OpenCV バッファーと同じであることを確認してください (プロパティの整列)。
  3. 例で示したコードはつかむことさえできませんが、実際のコードでそれを行っていると思います。あなたのバッファは半分埋められているように見えるので(ガベージ+グリーン)、一度に1つのフィールドしか取得していない可能性があります(2フィールド= 1フレーム)
  4. OpenCV と MIL を使用して、バッファーをクリアし、1 つの白いピクセルを (0, 1) に設定して、画像内の同じ場所に表示されるかどうかを確認する必要があります。
于 2013-05-31T12:04:26.097 に答える