Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 Android:将位图保存到SD卡时,图像质量非常差_Java_Android_Image_Filter - Fatal编程技术网

Java Android:将位图保存到SD卡时,图像质量非常差

Java Android:将位图保存到SD卡时,图像质量非常差,java,android,image,filter,Java,Android,Image,Filter,我正在为Android制作一个OCR应用程序,它将截取一些文本,识别它们并在谷歌上搜索一个关键词。如果你还没有意识到的话,我正在尝试制作一个“谷歌现在点击”的克隆 为了使OCR更好地工作,我首先旋转图像,然后过滤图像。首先去掉状态栏和导航栏,然后将其转换为灰度,然后锐化 但滤波后的图像质量极为像素化,这极大地影响了OCR的精度 这是我收到的一封IFTTT电子邮件前后的图片 正如您所看到的,before图像的质量要比经过过滤和旋转的图像高很多 以下是我旋转、过滤和保存图像的代码: 首先拍摄截图,

我正在为Android制作一个OCR应用程序,它将截取一些文本,识别它们并在谷歌上搜索一个关键词。如果你还没有意识到的话,我正在尝试制作一个“谷歌现在点击”的克隆

为了使OCR更好地工作,我首先旋转图像,然后过滤图像。首先去掉状态栏和导航栏,然后将其转换为灰度,然后锐化

但滤波后的图像质量极为像素化,这极大地影响了OCR的精度

这是我收到的一封IFTTT电子邮件前后的图片

正如您所看到的,before图像的质量要比经过过滤和旋转的图像高很多

以下是我旋转、过滤和保存图像的代码:

首先拍摄截图,然后保存截图

    public void getScreenshot()
    {
        try
        {
            Process sh = Runtime.getRuntime().exec("su", null, null);

            OutputStream os = sh.getOutputStream();
            os.write(("/system/bin/screencap -p " + _path).getBytes("ASCII"));
            os.flush();

            os.close();
            sh.waitFor();

            onPhotoTaken();

            Toast.makeText(this, "Screenshot taken", Toast.LENGTH_SHORT).show();
        }
        catch (IOException e)
        {
            System.out.println("IOException");
        }
        catch (InterruptedException e)
        {
            System.out.println("InterruptedException");
        }

    }
然后,旋转图像:

protectedvoid onphototake(){
_假设为真;
BitmapFactory.Options=new-BitmapFactory.Options();
options.inSampleSize=4;
位图位图=位图工厂.decodeFile(_路径,选项);
试一试{
ExifInterface exif=新的ExifInterface(_路径);
int exiforOrientation=exif.getAttributeInt(
ExifInterface.TAG_方向,
ExiFinInterface.方向(U法线);
Log.v(标签“方向:+EXIFORIENTION”);
int=0;
开关(出口方向){
外壳出口接口。方向旋转90:
旋转=90;
打破
外壳出口接口.方向旋转180:
旋转=180;
打破
外壳出口接口方向旋转270:
旋转=270;
打破
}
对数v(标签“旋转:”+旋转);
如果(旋转!=0){
//获取给定图像的宽度和高度。
int w=bitmap.getWidth();
int h=bitmap.getHeight();
//设置预旋转
矩阵mtx=新矩阵();
mtx.预旋转(旋转);
//旋转位图
位图=位图。创建位图(位图,0,0,w,h,mtx,false);
}
//转换为ATES要求的ARGB_8888
bitmap=bitmap.copy(bitmap.Config.ARGB_8888,true);
}捕获(IOE异常){
Log.e(标记“无法更正方向:”+e.toString());
}
//_image.setImageBitmap(位图);
设置图像过滤器(位图);

}
看起来jpeg压缩确实把图像搞乱了。尝试使用更适合边缘锐利的图像的格式,例如文本。我会推荐png甚至gif。您还可以存储未压缩的BMP

Jpeg压缩的工作原理是,在大多数图片(自然、人、对象)中,锐利的边缘不是人眼所能看到的。这使得存储边缘锐利的内容(如文本)变得非常糟糕

此外,图像过滤器有效地消除了图像的抗锯齿,从而进一步降低了可感知的图像质量。然而,这可能是您想要做的,因为它可能会使OCR更容易

我也错过了抽样的大小,因为你上传的图片大小与网站上的相同。从:

如果设置为大于1的值,则请求解码器对原始数据进行二次采样 图像,返回较小的图像以节省内存。样本量为 任一维中对应于单个像素的像素数 解码位图中的像素。例如,inSampleSize==4返回一个 图像的宽度/高度为原稿的1/4,宽度/高度为原稿的1/16
像素数。任何值看起来都像是jpeg压缩将图像弄乱了。尝试使用更适合边缘锐利的图像的格式,例如文本。我会推荐png甚至gif。您还可以存储未压缩的BMP

Jpeg压缩的工作原理是,在大多数图片(自然、人、对象)中,锐利的边缘不是人眼所能看到的。这使得存储边缘锐利的内容(如文本)变得非常糟糕

此外,图像过滤器有效地消除了图像的抗锯齿,从而进一步降低了可感知的图像质量。然而,这可能是您想要做的,因为它可能会使OCR更容易

我也错过了抽样的大小,因为你上传的图片大小与网站上的相同。从:

如果设置为大于1的值,则请求解码器对原始数据进行二次采样 图像,返回较小的图像以节省内存。样本量为 任一维中对应于单个像素的像素数 解码位图中的像素。例如,inSampleSize==4返回一个 图像的宽度/高度为原稿的1/4,宽度/高度为原稿的1/16
像素数。任何值看起来都像是jpeg压缩将图像弄乱了。尝试使用更适合边缘锐利的图像的格式,例如文本。我会推荐png甚至gif。您还可以存储未压缩的BMP

Jpeg压缩的工作原理是,在大多数图片(自然、人、对象)中,锐利的边缘不是人眼所能看到的。这使得存储边缘锐利的内容(如文本)变得非常糟糕

此外,图像过滤器有效地消除了图像的抗锯齿,从而进一步降低了可感知的图像质量。然而,这可能是您想要做的,因为它可能会使OCR更容易

我也错过了抽样的大小,因为你上传的图片大小与网站上的相同。从:

如果设置为大于1的值,则请求解码器对原始数据进行二次采样 图像,返回较小的图像以节省内存。样本量为 任一维中对应于单个像素的像素数 解码位图中的像素。例如,inSampleSize==4返回一个 图像的宽度/高度为原稿的1/4,宽度/高度为原稿的1/16
像素数。任何值看起来都像是jpeg压缩将图像弄乱了。尝试使用更适合边缘锐利的图像的格式,例如文本。我会推荐png甚至gif。你可能会患als