opencv bitmap转Mat后颜色发生了变化

一、问题原因:

    Android项目里 bitmap转Mat后通过Imgcodecs.imwrite 保存发现原本图片颜色和转换后的颜色不一致。

原图片:

原图

转换后图片:

转换后图片


代码演示

二、问题分析

观察发现,原本红色的变成了蓝色,通过拾色软件可以看到RGB的数值变化。

网上查看很多资料后发现OpenCV的排序不是传统的RGB,而是BGR排序。

三、解决办法

    把bitmap的ARGB得顺序,变成ABGR顺序后,再进行bitmap转Mat。

    代码实例:

public static BitmapRgbToBgr(Bitmap bitmap){

int width=bitmap.getWidth();

    int height=bitmap.getHeight();

    int[] pixels=new int[width*height];

    bitmap.getPixels(pixels,0,width,0,0,width,height);

    int indx=0;

    int a=0,r=0,g=0,b=0;

    for(int row=0;row

indx=row*width;

        for (int col=0;col

int pixel=pixels[indx];

            a=(pixel>>24)&0xff;

            r=(pixel>>16)&0xff;

            g=(pixel>>8)&0xff;

            b=pixel&0xff;

            pixel=((a&0xff)<<24)|((b&0xff)<<16)|((g&0xff)<<8)|(r&0xff);

            pixels[indx]=pixel;

            indx++;

        }

}

bitmap=Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);

    bitmap.setPixels(pixels,0,width,0,0,width,height);

    return bitmap;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容