首页 文章

为什么opencv的默认颜色空间在android中有所不同?

提问于
浏览
1

我以为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库版本是一样的 .

1 回答

  • 0

    我猜他们改变了这一点,在过去的Android中,它也被加载为BGR,但现在它似乎是RGB .

    你总是可以转换它:

    Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2BGR);
    

    要么

    Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGBA2BGR);
    

相关问题