当前位置: 首页 > 面试题库 >

如何从openCV android中的Byte []获取Mat对象?

洪季萌
2023-03-14
问题内容

我正在使用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);

  1. 然后转换为位图,bitmapToMat() 在这种情况下,红色变为蓝色。

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我如何从javafx image / imageview类获取byte []?我想将图像作为Blob存储到数据库中。这是我使用的方法 有没有一种方法可以将当前对象(图像视图,图像)转换为byte [] ?,还是应该开始考虑对图像使用其他类/或者指向带有引用的位置并使用路径/ URL? 问题答案: 试试这个: 应该根据徽标类别工作 您需要在写入和读取时指定一种格式,据我所知,不支持bmp

  • 我是Javascript新手,我正试图从包含多个对象的数组中获取id键的值。 通过 for..在循环中,我需要对象的id - 如1,2或3 - 与不同的值进行比较。 我试着这样做: 但是,我这样做了,删除Id值返回未定义。 我想不通为什么返回未定义,我无法解决这个问题。 我希望我能很好地表达自己,对不起我的英语不好。

  • 这是我的密码。我正在使用FFmpegFrameGrabber从我的android文件系统中存储的视频中一个接一个地抓取帧。我需要一些方法来转换一个IplImage或一个框架到一个Mat,以便我可以在它上执行一些功能。

  • 我在Netbeans构建了一个Java项目。我有一个表单,表单内部有一个jList,其中填充了一个对象(Favorite)。我也有一个按钮,我想当我按下按钮删除选定的项目在jList。 我正在尝试以下代码,但我得到一个错误。 我得到以下错误: 线程“AWT-EventQueue-0”中出现异常Java . lang . classcastexception:Java . lang . string

  • 我有一个php对象,我想从中获取一些值 这就是我所拥有的: 如何获得变量中title的值?

  • 问题内容: 可以说我有一个单词列表,我想创建一个将新列表的大小作为参数并返回新列表的方法。我如何从原始sourceList中获得随机单词? 那么,如何以及在哪里可以使用我的随机数? 问题答案: 我找到了适当的解决方案。Random提供了一些返回流的方法。例如ints(size)会创建一个随机整数流。