如何从openCV android中的Byte []获取Mat对象?
我正在使用Android中的OpenCV库。我有一个实现的类PictureCallBack
。
覆盖方法onPictureTaken()
如下所示,
@Overridepublic 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对象的最有效方法是什么?我已经尝试过这些方法:
- 不知道图像发生了什么。
Mat m=new Mat(); m.put(0,0,data);
- 然后转换为位图,
bitmapToMat()
在这种情况下,红色变为蓝色。
在保存图像以备将来使用时,我也没有任何问题,但这导致我出现异常,因为当我使用先前存储的图像时,尚未生成文件。
回答:
您必须指定图像的宽度和高度/垫和通道深度。
Mat mat = new Mat(width, height, CvType.CV_8UC3);mat.put(0, 0, data);
确保您使用的垫子类型正确。也许您的数据不是3字节RGB格式,您应该使用其他类型,例如CvType.CV_8UC1
。
祝好运!
以上是 如何从openCV android中的Byte []获取Mat对象? 的全部内容, 来源链接: utcz.com/qa/418380.html