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

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

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"); } 

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

unsigned char* raw_data创建IplImage需要2条重要指令: 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"); 

我没有测试过代码,但是您正在寻找的代码的路线图就在那里。

如果你正在使用C ++,我不明白你为什么不这样做的简单方法:

如果支持你的相机,我会这样做:

  cv::VideoCapture capture(0); if(!capture.isOpened()) { // print error return -1; } cv::namedWindow("viewer"); cv::Mat frame; while( true ) { capture >> frame; // ... processing here cv::imshow("viewer", frame); int c = cv::waitKey(10); if( (char)c == 'c' ) { break; } // press c to quit } 

我建议您开始阅读您可以在此处找到的文档和教程。