gpt4 book ai didi

java - 在相机预览中计算颜色

转载 作者:行者123 更新时间:2023-12-01 15:03:51 25 4
gpt4 key购买 nike

我正在开发一个从相机获取图像预览图像的项目,那么我必须计算蓝色的平均数量 在图像中,我已经从相机快速拍摄了图像(作为预览图像)。图像格式是 NV21 (真的不是图像格式专家,所以我不知道他们为什么使用它)

这就是我从相机预览回调读取图像的方式

public void onPreviewFrame(byte[] data, Camera camera) {

Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, ImageFormat.NV21, size.width,
size.height, null);
Rect rectangle = new Rect();
rectangle.bottom = size.height;
rectangle.top = 0;
rectangle.left = 0;
rectangle.right = size.width;
ByteArrayOutputStream out2 = new ByteArrayOutputStream();
image.compressToJpeg(rectangle, 100, out2);

byte[] d = out2.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(d, 0, d.length);
}

正如你所见,我现在有了位图,我计划通过读取位图像素来确定图像中的蓝色,然后处理像素通过 Pixel,但同事说这种方式在某些情况下又重又慢,并且不准确,而且我必须从硬件本身获取图像中的蓝色作为矩阵,并且我不知道从哪里开始(顺便说一句,我的同事使用 iOS 版本),任何帮助将不胜感激。

最佳答案

如果您在 Android 上使用 opencv,则可以进行简单的 native 调用 (JNICALL),将位图作为 jbyte* 传递给函数,然后在函数中使用以下命令将其转换为 BGR垫 myuv,mbgra;cvtColor(myuv, mbgra, CV_YUV420sp2BGR, 4);

然后分割矩阵 mbgra ,在发现没有蓝色像素是分割矩阵上的二进制掩码操作之后,因为它是原生的,并且您不会逐个像素地查看每个像素,它可能会很快。

关于java - 在相机预览中计算颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13253388/

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