我认为opencv的默认颜色空间是BGR? 我已经使用opencv for desktop开发了一个c ++代码,现在使用JNI和NDK成功集成到android中,但是,我注意到图像最初是在android中而不是BGR中加载RGB颜色空间。
我在android中首先将位图转换为Mat并将其传递给我的JNI函数。
这使我的世界在图像处理中颠倒了,因为它影响了我的二值化算法,特别是cvtColor函数(我在原生c ++中做)。二值化图像不像以前那样干净,我必须找到一种方法来修复它(在我做2次扩张然后1次侵蚀之前,但是现在,它的1次侵蚀和2次扩张),这给出了二进制图像不太好的时候我使用openCV桌面运行代码。
即使用Scalar(0,0,255)(它应该是红色)绘制Mat图像的圆圈,我也注意到它的蓝色。
我可以在Android中加载一个图像吗?它的BGR色彩空间?
编辑:
cvtColor(RGB2BGR)在android中显示: !(https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-prn2/t1/q71/s720x720/1979665_10202132337484510_1325794214_n.jpg)
因为在opencv for desktop中,它是为图像加载的BGR颜色空间,所以它将原始图像加载到BGR颜色空间中: !(https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-frc3/t1/10013535_10202132340924596_1741770081_n.jpg)
当我在opencv for desktop中执行cvtColor(BGR2HLS)时,结果如下: !(https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-frc1/t1/1920558_10202132339444559_2012886085_n.jpg)
但在android中我做cvtColor(RGB2HLS)的结果是: !(https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-prn2/t1/q71/s720x720/1505483_10202132336164477_595021411_n.jpg)
请注意,如果我执行cvtColor(RGB2BGR)然后执行cvtColor(BGR2HLS),则不是原始图像转换为HLS。
PS:我的意思是android使用我使用JNI导入的c ++代码。 当我在visual studio中使用opencv for desktop时,它的c ++代码相同。 OPENCV库版本是一样的。
答案 0 :(得分:0)
我猜他们改变了这一点,在Android过去,它也被加载为BGR,但现在看起来似乎是RGB。
您可以随时转换它:
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2BGR);
或
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGBA2BGR);