如何从openCV android中的Byte []获取Mat对象?
image-processing
java
opencv
6
0

我正在使用Android中的OpenCV库。我有一个实现PictureCallBack的类。

重写方法onPictureTaken()如下所示,

     @Override
public void onPictureTaken(byte[] data, Camera camera) {
    Log.i(TAG, "Saving a bitmap to file");
    // The camera preview was automatically stopped. Start it again.
    mCamera.startPreview();
    mCamera.setPreviewCallback(this);

    // Write the image in a file (in jpeg format)
    try {
        FileOutputStream fos = new FileOutputStream(mPictureFileName);
        fos.write(data);
        fos.close();

    } catch (java.io.IOException e) {
        Log.e("PictureDemo", "Exception in photoCallback", e);
    }
}

正如我希望图像数据可以在图像处理中进一步使用,而不是保存和重新加载图像。

从Byte数组获取Mat对象的最有效方法是什么?我已经尝试过这些方法:

  1. 不知道图像发生了什么。

    Mat m=new Mat(); m.put(0,0,data);

  2. 转换为Bitmap,然后使用bitmapToMat()在这种情况下,红色变为蓝色。

在保存图像以备将来使用时,我也没有任何问题,但这导致我出现异常,因为在使用先前存储的图像时,尚未生成文件。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

最好和最简单的方法是这样的:

byte[] bytes = FileUtils.readFileToByteArray(new File("aaa.jpg"));
Mat mat = Imgcodecs.imdecode(new MatOfByte(bytes), Imgcodecs.CV_LOAD_IMAGE_UNCHANGED);
收藏
评论

您必须指定图像的宽度和高度/垫和通道深度。

Mat mat = new Mat(width, height, CvType.CV_8UC3);
mat.put(0, 0, data);

确保您使用的垫子类型正确。也许您的数据不是3字节RGB格式,您应该使用其他类型,例如CvType.CV_8UC1
祝好运!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号