我正在从我的网络摄像头捕捉实时视频到 Mat 对象。 是他们在不使用任何 API(例如 openCV)的情况下将 MAT 对象转换为灰度图像帧的任何有效方法...... 我已经尝试过使用 openCV。 但我喜欢用 C++ 实现...他们有什么方法可以做到吗?
最佳答案
我建议您使用 OpenCV。 OpenCV 已经包含用于在各种颜色空间之间转换的优化实现(即甚至在 RGB(实际上是 OpenCV 的 BGR)到灰度之间)。
查看更多详情:http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html .
OpenCV 已经用 C++ 实现了。
如果你真的想为教学目的实现你自己的(我不明白为什么你会这样做)那么简单的方法就是迭代 Mat 中的 R G B 值并应用公式:
结果 Vlue = 0.299 * R + 0.587 * G + 0.114 * B
(另请参阅堆栈溢出问题 Converting RGB to grayscale/intensity,以更详细地讨论为什么 R G B 分量通常获得不同的权重)
假设您要将 RGB 转换为灰色。对于其他颜色空间转换,请查看 OpenCv 文档,其中还详细说明了转换是如何完成的(参见上面提供的链接)。
更重要的是,OpenCV 是开源的。这意味着如果您想了解最佳实现方式,您可以下载源代码并查看。
关于c++ - 不使用 OpenCV 对帧进行灰度化的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25814582/