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

标签 java android image-processing colors bitmap

我正在开发一个从相机获取图像预览图像的项目,那么我必须计算蓝色的平均数量 在图像中,我已经从相机快速拍摄了图像(作为预览图像)。 图像格式是 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/

相关文章:

java - 您可以在 Canvas 上使用红色或蓝色和背景图像进行绘制

java - 我应该在这个声明中放入什么变量才能使其工作?

android - 在 picasso 中加载图像后无法隐藏进度条?

opencv - 如何在 OpenCV 中使用夜视摄像头输入(帧)?

java, spring boot 在运行时自动生成 getter 和 setter

java - 更新扩展 ArrayAdapter 的 ListView 时出现 ConcurrentModificationException

android - 绘制圆形扇形

java - Android Google Play 服务错误 : didn't find class com. google.android.gms.maps.mapfragment 路径 dexpathlist

python - 从YOLO边界框坐标中提取单独的图像

用于云中托管图像的 Javascript 灰度脚本