Низкое качество изображения Google Mobile Vision
Я пытаюсь сделать снимок с камеры с помощью библиотеки мобильного видения, но качество получаемого изображения низкое (разрешение 240х320)
Я не знаю, где мне следует изменить эту функцию (я думаю, это связано с CameraSource), и я не уверен, что мне следует изменить или нет.
Вот моя функция захвата (отсюда: как захватывать изображение, используя мобильное зрение api - отслеживание лица)
public void takePicture(){
cameraSource.takePicture(null, new CameraSource.PictureCallback() {
private File imageFile;
@Override
public void onPictureTaken(byte[] bytes) {
try {
// convert byte array into bitmap
Bitmap loadedImage = null;
Bitmap rotatedBitmap = null;
loadedImage = BitmapFactory.decodeByteArray(bytes, 0,
bytes.length);
Matrix rotateMatrix = new Matrix();
rotateMatrix.postRotate(0);
rotatedBitmap = Bitmap.createBitmap(loadedImage, 0, 0,
loadedImage.getWidth(), loadedImage.getHeight(),
rotateMatrix, false);
File dir = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyPhotos");
boolean success = true;
if (!dir.exists())
{
success = dir.mkdirs();
}
if (success) {
java.util.Date date = new java.util.Date();
imageFile = new File(dir.getAbsolutePath()
+ File.separator
+ new Timestamp(date.getTime()).toString()
+ "Image.jpg");
pictureName = imageFile.getName();
Log.i("Picture Name ", pictureName);
imageFile.createNewFile();
Toast.makeText(MainActivity.this, "Image Saved", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getBaseContext(), "Image Not saved",
Toast.LENGTH_SHORT).show();
return;
}
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
// save image into gallery
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
FileOutputStream fout = new FileOutputStream(imageFile);
fout.write(ostream.toByteArray());
fout.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATE_TAKEN,
System.currentTimeMillis());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATA,
imageFile.getAbsolutePath());
MainActivity.this.getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//saveToInternalStorage(loadedImage);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Вот создание CameraSource:
cameraSource = new CameraSource.Builder(getApplicationContext(), detector)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1280, 1024)
.setRequestedFps(2.0f)
.setAutoFocusEnabled(true)
.build();
Должен ли я что-то изменить или добавить что-то здесь?
Спасибо за помощь.
1 ответ
Решение
Я исправил эту проблему, изменив эти две строки:
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
Я изменил формат на PNG
rotatedBitmap.compress(Bitmap.CompressFormat.PNG, 100, ostream);
И изменил эти атрибуты камеры источника, когда я создаю переменную
.setRequestedPreviewSize(1920, 1024)
.setRequestedFps(3.0f)