我正在使用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 ,而您实际上不必考虑内存管理和其他内容。