gpt4 book ai didi

android - onpreviewcallback字节数组以匹配opencv

转载 作者:行者123 更新时间:2023-12-02 16:56:20 25 4
gpt4 key购买 nike

嗨,我正在尝试使用Android的PreviewCallback对捕获的OnPreviewFrame上的帧进行opencv处理。我遇到的问题是在测试处理之前一切正常,将byte []设置为Mat,然后将Mat设置为位图时,位图看起来像是色彩噪声。

mCamera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Mat color = new Mat(480,640, CvType.CV_8UC1);
color.put(0, 0, data);
Mat imageMat = new Mat(480,640,CvType.CV_8UC1);
Bitmap bmpOut = Bitmap.createBitmap(color.width(),color.height(),
Bitmap.Config.ARGB_8888);

Imgproc.cvtColor(color,imageMat, Imgproc.COLOR_YUV420sp2RGBA);

Utils.matToBitmap(imageMat,bmpOut,true);
image.setImageBitmap(bmpOut);
}

任何帮助将不胜感激!

最佳答案

实际上,Mat的大小不应该是所选预览的大小。

矩阵的宽度需要比预览大小大1.5倍,如下所示:

// Copy preview data to a new Mat element 
Mat mYuv = new Mat(frameHeight + frameHeight / 2, frameWidth, CvType.CV_8UC1);
mYuv.put(0, 0, data);

然后,通常创建一个位图:
// Convert preview frame to rgba color space
final Mat mRgba = new Mat();
Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV2BGR_NV12, 4);

// Converts the Mat to a bitmap.
Bitmap bitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(img, bitmap);
matToBitmap方法是一种实用程序方法,可以节省转换为Bitmap的大量工作,因此我强烈建议您使用它来反对自己创建。

关于android - onpreviewcallback字节数组以匹配opencv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com