0

このサイトhttp://www.lirtex.com/robotics/fast-object-tracking-robot-computer-vision/に書かれている内容に従って、次のプログラムを実行しようとしています 。

初期化パラメータ

CvCapture *capture = cvCaptureFromCAM(0);

int width = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH );
int height = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT );

IplImage *frame;

 CvSize size = cvSize(640,480);
cvNamedWindow( "Camera", CV_WINDOW_NORMAL  );
cvNamedWindow( "HSV", CV_WINDOW_NORMAL  );
cvNamedWindow( "EdgeDetection", CV_WINDOW_NORMAL  );

cvResizeWindow("Camera",640,480);
cvResizeWindow("HSV",640,480);
cvResizeWindow("EdgeDetection",640,480);



IplImage *  hsv_frame    = cvCreateImage(size, IPL_DEPTH_8U, 3);
IplImage*  thresholded   = cvCreateImage(size, IPL_DEPTH_8U, 1);

このように関数cvCvtColorを呼び出す場合:

cvCvtColor(frame, frame  , CV_BGR2HSV);

2番目のパラメーターは最初のパラメーターと同じです

しかし、私がこのような関数を呼び出すとき

cvCvtColor(frame, hsv_frame  , CV_BGR2HSV);

その失敗と例外をスローします

なぜこれが起こるのか誰かが知っていますか?

4

1 に答える 1

1

配列フレームはキャプチャされた画像のサイズですが、*hsv_frame* は 640x480 にハードコードされています。色空間変換操作 (cvCvtColor) では、ソースと宛先の両方が同じサイズである必要があるため、例外です。

解決:

を。設定により入力と同じサイズを使用

CvSize size = cvSize(frame->width, frame->height);

-また-

b. 最終的な o/p を 640x480 にしたい場合は、次を使用して入力を必要なサイズにサイズ変更します。cvResize

最後に 1 つ: C++ インターフェイスは、C インターフェイスに比べてはるかに直感的で安定しており、機能が追加されています。OpenCV の C++ インターフェイスに移行することをお勧めします

于 2012-07-14T07:00:35.733 に答える