在Android中捕获图像并使用opencv处理它们的最佳方法是什么? 我应该使用表面视图As here还是应该像opencv样本一样使用opencv相机?以及如何加载捕获的图像并将其转换为Mat? 提前致谢
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (pictureFile == null) {
Log.d("E",
"Error creating media file, check storage permissions ");
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
//processImage();
} catch (FileNotFoundException e) {
Log.d("E", "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d("E", "Error accessing file: " + e.getMessage());
}
}
答案 0 :(得分:8)
在OpenCV示例中,有一个CameraBridgeViewBase,可帮助捕获,处理和显示相机预览的结果(连续的低分辨率图像流)。
如果要处理具有更高分辨率的单个捕获,则应使用类似于onPictureTaken()的内容。然后,您可以使用Highgui.imread()阅读图像并进行处理。
您还可以通过使用BitmapFactory.decodeByteArray()从数据数组创建位图,然后使用Utils.bitmapToMat()将位图转换为Mat来避免写入和读取文件