我正在使用 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 channel 保存为单独的“灰度”图像文件,但我不了解有关单 channel 操作的 OpenCV 文档。任何人都可以建议实现这一目标的方法吗?最好它在计算上不会过于昂贵(逐个像素循环图像不是一种选择 - 我正在处理高达 1280x1064 的 60-230fps 视频,并且所有处理都必须在捕获点完成)。
运行最新的 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 函数可以直接写入一个标准的 vector ,你真的不需要考虑内存管理和其他东西。
关于c++ - 在 C++ 下的 OpenCV 中提取 RGB channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295548/