我正在尝试开发一个应用程序,它会自动裁剪使用opencv检测到的卡片边缘。
Here in this function i am doing the following :
1)将字节数组(即数据)转换为位图,然后转换为Mat
2)裁剪卡片的所需部分并重新调整大小
3)将mat转换回字节数组
4)将修改后的字节数组保存在文件(jpg)
中@Override
public void onPictureTaken(byte[] data, Camera camera) {
Mat mat=new Mat();
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
Utils.bitmapToMat(bmp, mat); //converting a mat to bitmap
Mat matCrop = mat.submat((int)p1.y,(int)p2.y,(int)p3.x,(int)p4.x);//surely no issues here
Imgproc.resize(matCrop, matCrop, mat.size());
byte[] imageInBytes = new byte[(int)(matCrop.total() * matCrop.channels())];
mat.get(0, 0, imageInBytes);
data=imageInBytes;
try {
FileOutputStream fos = new FileOutputStream(mPictureFileName);
fos.write(data);
fos.close();
} catch (java.io.IOException e) {}
}
图片保存在内存中,但预览和图片都是空白的。保存的文件也需要大约3.5 Mb,这可能是什么原因? 提前致谢。