Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Blob从SQLite数据库转换为位图然后转换为mat时,颜色会发生变化_Java_Android_Opencv_Bitmap - Fatal编程技术网

Java 将Blob从SQLite数据库转换为位图然后转换为mat时,颜色会发生变化

Java 将Blob从SQLite数据库转换为位图然后转换为mat时,颜色会发生变化,java,android,opencv,bitmap,Java,Android,Opencv,Bitmap,所以我在SQLite数据库中放了一个Blob 接下来我要做的是从数据库中读取blob(因此我将blob转换为位图)。 然后,我将此位图转换为Mat(因为我需要将其用于功能描述符),但最终得到的是以下Mat: 正如你所看到的,颜色都错了。这是我的代码: BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); bmpFactoryOptions.inPre

所以我在SQLite数据库中放了一个Blob

接下来我要做的是从数据库中读取blob(因此我将blob转换为位图)。 然后,我将此位图转换为Mat(因为我需要将其用于功能描述符),但最终得到的是以下Mat:

正如你所看到的,颜色都错了。这是我的代码:

    BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
                        bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
                        bmpFactoryOptions.inScaled = false;
                        bmpFactoryOptions.outHeight = 240;
                        bmpFactoryOptions.outWidth = 320;
                        // decodes the blob back into a bitmap
                        byte[] blob = contact.getMP();
                        ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                        Bitmap scalen = Bitmap.createScaledBitmap(bitmap, 320, 240, false);
Mat ImageMat = new Mat();
                        Utils.bitmapToMat(scalen, ImageMat);
我需要输出图像与输入图像完全相同,我做错了什么

更新:

当我读位图图像时

    try {
                        FileOutputStream out = new FileOutputStream("mnt/sdcard/test.png");
                        bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
                 } catch (Exception e) {
                        e.printStackTrace();
                 }

它返回具有正确颜色的图像,因此颜色更改与将位图转换为Mat有关。

它看起来好像红色和蓝色值交换了。如何显示
Mat
String filename=Environment.getExternalStorageDirectory().getAbsolutePath();文件名+=“/MATCheck_u2;”;SimpleDateFormat fmt=新的SimpleDateFormat(“yyyy-mm-dd_HH-mm-ss”);日期日期=新日期(System.currentTimeMillis());字符串dateString=fmt.format(日期);filename+=日期字符串;文件名+=“.png”;imwrite(文件名,ImageMat)该代码适用于我以完全相同的方式保存的其他图像。(不使用数据库,但Mat img2=Highgui.imread(“mnt/sdcard/blabla.png”);