正在处理从Images
获取Preview Images
或Camera
的项目,然后我必须计算图像中Blue
的平均数,我已经拍摄了图像快速从相机(As Preview Images
)。
图像格式为NV21
(真的不是图像格式专家,所以我不知道他们使用它的原因)
这就是我从Camera Preview Callback
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);
}
正如您所见,我现在有Bitmap
,我正计划通过阅读Bitmap
像素然后处理Pixel by Pixel
来确定图像中的蓝色,但是同事在某些情况下,这种方式很重,很慢,而且不准确,我必须将图像中的蓝色作为自身硬件的矩阵,并且我不知道从哪里开始(顺便说一句,我的同事在iOS版本上工作),任何帮助将不胜感激。
答案 0 :(得分:1)
如果您使用opencv for android,您可以使用简单的本机调用(JNICALL)将位图作为jbyte *传递给函数,然后在函数中将其转换为BGR使用 Mat myuv,mbgra; cvtColor(myuv,mbgra,CV_YUV420sp2BGR,4);
然后分割矩阵mbgra,在此发现之后,蓝色像素中没有一个是分裂矩阵的二元掩模操作,因为它的原生并且你不会逐个像素地查看它可能很快。