在c++下在OpenCV中提取RGB通道



我使用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文档。谁能提出一个实现这一目标的方法?最好不要在计算上过于昂贵(逐像素循环图像不是一个选择-我正在使用60-230fps的视频,最高1280x1064,所有的处理都必须在捕获点完成)。

运行最新的Debian测试,如果这有什么不同(我不认为应该)。

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

相关内容

  • 没有找到相关文章

最新更新