5
私は、画像が撮影されるとすぐに、つまりonPictureTaken()
コールバックで画像を処理しようとしていました。バイト配列をOpenCV行列に変換する必要がありますが、私がしようとするとアプリケーション全体がフリーズします。それはそれを解決する方法をフリーズすると、なぜOpenCV onPictureTakenで画像を処理するには?
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
Log.w(TAG, "picture taken!");
if (bytes != null) {
Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Mat matImage = new Mat();
// This is where my app freezes.
Utils.bitmapToMat(image, matImage);
Log.w(TAG, matImage.dump());
}
mCamera.startPreview();
mCamera.setPreviewCallback(this);
}
、誰もが知っています:基本的に私がしたすべては、このでしたか?
注:私はOpenCV4Androidチュートリアル3をベースとして使用しました。
アップデート1:私はまた、次のように(任意の成功なし)バイトをparsteしようとしました:
Mat mat = Imgcodecs.imdecode(
new MatOfByte(bytes),
Imgcodecs.CV_LOAD_IMAGE_UNCHANGED
);
アップデート2:たぶんこれは動作するはずです、それはしかし、私のためではありませんでした。
Mat mat = new Mat(1, bytes.length, CvType.CV_8UC3);
mat.put(0, 0, bytes);
もこの変形ました:
Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC1);
mat.put(0, 0, bytes);
はアップデート3:これはどちらか私のために動作しませんでした:
Mat mat = new MatOfByte(bytes);