c++ - 在 C++ 下的 OpenCV 中提取 RGB channel

标签 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 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/

相关文章:

android - OpenCV for Android - 初始化矩阵

c++ - 如何将 C++ wstring UTF-8 字符打印到 Mac OS 或 Unix 终端?

C++ mq_receive EMSGSIZE问题

c++ - 消息总线的最佳容器

c++ - C++ 共享库 API 中使用的数据类型

c++ - 在 opencv 中使用 GridAdaptedFeatureDetector 进行特征检测

c++ - 具有最新标准支持的 Mingw 构建

c++ - 将缓冲区写入文件(存储 1585 字节而不是 1580)

在图像/帧序列中查找差异/相似性的算法

c++ - 无法使用 cv CornerHarris() 获取输出结果