Android OpenCV Highgui.imread颜色错误

时间:2012-12-05 16:32:32

标签: android opencv

我有代码从SD卡加载图像并将其发布到ImageView。

Mat mRgba = Highgui.imread(dir);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRgba, bmp);
mImage.setImageBitmap(bmp, true, null, 5.0f);

图像已加载,但颜色错误。颜色似乎是倒置的(但没有反转)。 这是image comparison

我试图通过

加载图片
Bitmap bmp = BitmapFactory.decodeFile(dir);

它工作正常。但我必须使用Highgui.imread

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:3)

你必须使用这样的东西:

    Mat inputImage = Highgui.imread(pathToFile);
    Mat tmp = new Mat();

    Imgproc.cvtColor(inputImage, tmp, Imgproc.COLOR_BGR2RGB);

    Bitmap imageToShow = Bitmap.createBitmap(tmp.cols(), tmp.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(tmp, imageToShow);

答案 1 :(得分:0)

你正在尝试加载一个位图,假设图像是8位/彩色RGBA:你确定吗?

答案 2 :(得分:0)

另请注意,ARGB不是RGBA。您可能需要重新排列每个像素的字节。像

这样的东西
int pixel = get_the_pixel();
int alpha = 0xff & pixel;
pixel = pixel<<8 | alpha;
set_the_pixel(pixel);

你想要做的事情比这里显示的访问者方法更有效,但你明白了。