【发布时间】:2015-12-09 14:08:40
【问题描述】:
我在几个地方(source、source)读到 OpenCV 默认使用 BGR 颜色格式。
但我正在编写一个类来检测图像中某种颜色(红色)的斑点(遵循Color Blob Detection sample)。所以在onCameraFrame(CvCameraViewFrame inputFrame) 函数中,我们返回值inputFrame.rgba()。根据documentation,
rgba() 这个方法返回 RGBA Mat 和框架
所以我假设我的rgbaFrame(在我的程序中存储inputFrame.rgba() 的值的变量)包含RGBA 格式的Mat。
但是当我运行应用程序时,原始图像中的红色在我写入外部 SD 卡的rgbaFrame Mat 中显得偏蓝。 显然,Mat 是 BGR 格式,因为红色看起来是蓝色的。(这在 comments of this question. 中进行了讨论)
所以我改变了我的cvtColorfunction
Imgproc.cvtColor(rgbaFrame, hsvImage, Imgproc.COLOR_RGB2HSV_FULL);
到
Imgproc.cvtColor(rgbaFrame, hsvImage, Imgproc.COLOR_BGR2HSV_FULL);
但是当我运行程序时没有任何改变。原始图像中的红色在捕获的帧中仍显示为蓝色。
所以现在我正在寻找一种将 RGB 转换为 BGR 格式的方法,尝试看看这是否有助于解决我的问题。但是一直没能找到。 如何将 BGR 转换为 RGB? 如果您对我有任何其他建议,请分享。
- 捕获相机帧的原始屏幕截图:
- rgbaFrame.jpg(因为我做了
Highgui.imwrite("/mnt/sdcard/DCIM/rgbaFrame.jpg", rgbaFrame);//check)
【问题讨论】:
-
好吧,
rgbaFrame在cvtColor之后将保持不变,因为您将结果写入hsvImage。你能告诉我们hsvImage的结果如何吗? -
@DmitryZaitsev 哦,是的,你可以看到所有的图片和代码here in this question.。如果您认为我也应该在这个问题中发布图片,请告诉我。
-
@DmitryZaitsev 和我更改为
Imgproc.cvtColor(rgbaFrame, hsvImage, Imgproc.COLOR_BGR2HSV_FULL);是基于rgbaFrame已经是 BGR 格式的假设。Imgproc.cvtColor(rgbaFrame, hsvImage, Imgproc.COLOR_BGR2HSV_FULL);函数只是将 BGR 颜色空间更改为 HSV 颜色空间吧? -
@DmitryZaitsev 请不要对我指出的另一个问题感到困惑,标有“(2)”的问题已经解决了。您可以在问题的编辑中看到 HSV 图像。
-
您可以使用 COLOR_BGR2RGB 或类似方法将 bgr 转换为 rgb,反之亦然。但是,您似乎正在保存 HSV 图像。在这种情况下,您需要将图像转换回 bgr 才能保存
标签: android opencv image-processing opencv3.0 opencv4android