我正在尝试将OpenCV垫转换为Android Bitmap但是这给我的图像带有蓝色色调(黄色变成蓝色)!即使我没有对图像进行任何处理!我不知道为什么会这样。以下是一些相关代码:
File file = new File(imgDecodableString);
image = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_COLOR);
resultBitmap = Bitmap.createBitmap(image.cols(), image.rows(),Bitmap.Config.ARGB_8888);;
Utils.matToBitmap(image, resultBitmap);
Bitmap mResult = resultBitmap;
ImageView imgView = (ImageView) findViewById(R.id.imgView);
imgView.setImageBitmap(mResult);
//imgView.setImageBitmap(BitmapFactory.decodeFile(imgDecodableString));
我是Android应用程序开发的新手,所以我可能会遗漏一些简单的东西。谢谢你的帮助!
编辑:
我正在上传图片以供参考。
答案 0 :(得分:2)
正如所怀疑的那样,问题在于RGB
颜色约定,Android遵循RGB
颜色约定,但OpenCV遵循BGR
颜色约定,您可以使用Imgproc.cvtColor(mat, Imgproc.COLOR_BGR2RGBA)
来纠正它,在ImageView
。
答案 1 :(得分:0)
根据给出的建议,我制作了一个将Mat转换为Bitmap的函数。此功能运行完美。
private static Bitmap convertMatToBitMap(Mat input){
Bitmap bmp = null;
Mat rgb = new Mat();
Imgproc.cvtColor(input, rgb, Imgproc.COLOR_BGR2RGB);
try {
bmp = Bitmap.createBitmap(rgb.cols(), rgb.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(rgb, bmp);
}
catch (CvException e){
Log.d("Exception",e.getMessage());
}
return bmp;
}