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;

}

你可能感兴趣的:(opencv bitmap转Mat后颜色发生了变化)