我有这段代码:
protected Bitmap processFrame(byte[] data) {
Mat mat = new Mat(mFrameHeight, mFrameWidth, CvType.CV_8UC3);
mat.put(0, 0, data);
//process mat with native code
Utils.matToBitmap(mat, mBitmap);
return mBitmap;
}
private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Bitmap bmp = processFrame(data);
if (bmp != null) {
//draw bmp
}
}
};
在某些时候我将位图定义为:
mBitmap = Bitmap.createBitmap(mFrameWidth, mFrameHeight, Bitmap.Config.RGB_565);
结果是捕获了相同的相机帧,但灰度重复了3次,我尝试了CvType.CV_8UC4,它们重复了4次。
我需要使用相同的步骤显示整个图像
有人抓到了错误吗?
答案 0 :(得分:1)
刚刚改变了这个方法..它已经解决了..
protected Bitmap processFrame(byte[] data) {
Mat mYuv = new Mat( mFrameHeight + mFrameHeight/2, mFrameWidth, CvType.CV_8UC1);
mYuv.put(0, 0, data);
Mat mRGB = new Mat();
Imgproc.cvtColor(mYuv, mRGB, Imgproc.COLOR_YUV2RGB_NV21, 3);
ProcessFrame(mRGB.getNativeObjAddr(), mRGB.width(), mRGB.height());
Utils.matToBitmap(mRGB, mBitmap);
return mBitmap;
}