在C ++下提取OpenCV中的RGB通道

时间:2015-07-08 14:23:09

标签: c++ opencv

我使用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测试,如果这有任何不同(我不认为应该)。

1 个答案:

答案 0 :(得分:2)

一旦你有一个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函数可以直接写入标准向量,你不必考虑内存管理和其他东西。