这是我们使用 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;
}
请注意,我在第二个代码片段中没有使用任何硬盘读/写操作,如下所示:
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 incvThreshold( )
吗?如果不是,那么使用 openCv 函数处理Buffers
(包含像素值)的替代方法是什么?如果没有使用缓冲区的直接方法,那么实现此目标的间接方法是什么?解决方法是什么?
简而言之,我不想在进行任何处理之前将数据带到硬盘上。