我在 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 对象的最有效方法是什么? 我已经尝试过这些方法:
不知道图像发生了什么。
Mat m=new Mat(); m.put(0,0,data);
转换为位图然后使用
bitmapToMat()
在这种情况下,红色变为蓝色。
我在保存图像以供将来使用时也没有任何问题,但这导致我出现异常,因为当我使用以前存储的图像时,文件尚未生成。
最佳答案
您必须指定图像/Mat 的宽度和高度以及 channel 深度。
Mat mat = new Mat(width, height, CvType.CV_8UC3);
mat.put(0, 0, data);
确保您使用的垫子类型正确。也许您的数据不是 3 字节 RGB 格式,您应该使用其他类型,例如CvType.CV_8UC1
.
祝你好运!
关于java - 如何从 openCV android 中的 Byte[] 获取 Mat 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113190/