これは、Opencv を使用して画像を表示および処理する方法です。
int _tmain(int argc, _TCHAR* argv[]) {
IplImage* img = cvLoadImage( "MGC.jpg" );
cvThreshold( img, img, 200, 255, CV_THRESH_BINARY );
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
cvShowImage("Example1", img);
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
}
以下に概説するように、私の目標を達成するのを手伝ってもらえますか?
int _tmain(int argc, _TCHAR* argv[]) {
Some code here (using some API other than OpenCv).... // Captures a frame and
//streams the data into a buffer Buf
Buffer B= Buf; // B contain binary image data i.e 16 bit pixel values
cvThreshold( B, B, 200, 255, CV_THRESH_BINARY );//Notice I am putting B and not an
//Image(legal?)
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
cvShowImage("Example1", B); //Notice I am putting B and not an Image(legal?)
cvWaitKey(0);
cvReleaseImage( &B );
cvDestroyWindow( "Example1" );
return 0;
}
次のような 2 番目のコード スニペットでは、ハードディスクの読み取り/書き込み操作を使用していないことに注意してください。
IplImage* img = cvLoadImage( "MGC.jpg" );
基本的に、私はリアルタイムのシナリオで作業しているため、時間のかかる をバイパスしていますcvLoadImage
。明らかに、データをハードディスクに保存していません。私のデータ全体はまだBuffer B
. これにより、アプリケーションにとって重要な時間を節約できます。
注:Buffer B
実際には、適用cvminmaxloc
など、 でさらに多くの処理を行う予定です。しかし、これらすべての機能には、私の場合のようなバッファではなく、ディスクからロードされたイメージが必要です。
ハードディスクに保存されているイメージではなく、バッファで作業するという私の目標を達成するために、正しい方向に向けることができますか? openCV の機能を理解するのに何か間違いがありますか?
アップデート:
imdecode
バッファから画像を読み取るために使用できる以下の提案。上記で説明したように、実際には OpenCv 関数を使用して画像の処理を行います。たとえばCVMinMaxLoc
、
cvThreshold( src, src, 200, 255, CV_THRESH_BINARY );
Buffer
Image in の代わりに最初の引数として入れることができcvThreshold( )
ますか? そうでない場合Buffers
、openCv 関数を使用して (ピクセル値を含む) を処理する代わりに何ができますか? バッファを操作する直接的な方法がない場合、この目標を達成するための間接的な方法は何ですか? 回避策は何ですか?
要するに、処理を行う前にデータをハードディスクに移動したくありません。