美文网首页OpenCv
opencv bitmap转Mat后颜色发生了变化

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

作者: 高巨龙 | 来源:发表于2018-04-03 14:56 被阅读157次

    一、问题原因:

        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后颜色发生了变化

        本文链接:https://www.haomeiwen.com/subject/lfoqhftx.html