一、问题原因:
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;
}
网友评论