我正在使用OpenCV,使用以下代码将使用IDS uEye摄像机捕获的图像数据转换为有用的格式:

IplImage* tmpImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);
tmpImg->imageData = pFrameBuffer[k];
frame = cv::cvarrToMat(tmpImg);

这很完美-我可以在更下游使用imwrite(filename,frame);将处理后的图像写成明智的格式。理想情况下,我希望能够将RGB通道另存为单独的“灰度”图像文件,但是我不了解有关单通道操作的OpenCV文档。谁能建议实现这一目标的方法?最好不要在计算上花费过多(逐个图像循环不是一个选择-我正在以1280x1064的分辨率处理60-230fps的视频,并且所有处理都必须在捕获时完成)。

如果可以运行最新的Debian Testing,那有什么不同(我不认为应该这样做)。

最佳答案

一旦有了cv::Mat对象,它就非常简单:

std::vector<cv::Mat> grayPlanes;
cv::split(frame, grayPlanes);

cv::imwrite("blue.png", grayPlanes[0]);
cv::imwrite("green.png", grayPlanes[1]);
cv::imwrite("red.png", grayPlanes[2]);

split函数可以直接写入标准 vector ,而您实际上不必考虑内存管理和其他内容。

10-01 15:45