OpenCV:将内存中的指针转换为图像

use*_*002 2 c c++ opencv pointers image

我有一个抓取器可以获取图像并使用以下代码在屏幕上显示它们

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");                                         }
Run Code Online (Sandbox Code Playgroud)

但我想使用指向图像数据的指针并用OpenCV显示它们,因为我需要对像素进行处理.我的相机是CCD单声道相机,像素的深度是8位.我是OpenCV的新手,opencv中是否有任何选项可以返回(unsigned char*)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc); 并在屏幕上显示它?或者从iPtr指针获取数据允许我使用图像数据?

kar*_*lip 5

创建一个IplImagefrom unsigned char* raw_data需要两条重要的指令: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");
Run Code Online (Sandbox Code Playgroud)

我还没有测试过代码,但是您正在寻找代码的路线图.

  • 只是抬头,因为我们在我们的机器人项目中遇到了这个例子的问题 - `cv_image-> widthStep`是一个对齐的行大小(在OpenCV文档中查找)而`cvSetData`需要实际的行大小,所以在某些情况下如果对齐的值与实际的行大小不匹配,则会移动像素. (2认同)