首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YUV图像处理

YUV图像处理
EN

Stack Overflow用户
提问于 2012-12-05 08:10:12
回答 3查看 5.1K关注 0票数 0

我正在开发一款android应用程序,它会从摄像头传来的每一张YUV图像中随机选取10个像素,并检查它们是红色还是蓝色。我知道如何处理RGB图像,但不知道如何处理YUV格式的图像。由于运行时的限制,我无法逐个像素地将其转换为RGB图像。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-05 12:08:07

我假设您使用的是Camera API的预览回调函数,在该回调函数中,您将获得每个帧的byte[]数据数组。

首先,您需要选择要使用的YUV格式。需要支持NV21,从Android3.0开始需要支持YV12。其他任何格式都不能保证可用。所以NV21是最安全的选择,也是默认的。

这两种格式都是YUV4:2:0格式;颜色信息在两个维度上被2倍二次采样,并且图像数据的布局与标准的交错RGB格式有很大的不同。作为一个源,FourCC.org's NV21 description具有所需的布局信息-首先是Y平面,然后是交错的UV数据。但由于这两个颜色平面的大小只有Y平面的四分之一,你必须决定如何对它们进行上采样-最简单的是最近邻。因此,如果您想从大小为(w,h)的图像中提取像素(x,y),最近邻方法是:

代码语言:javascript
复制
Y = image[ y * w + x];
U = image[ w * h + floor(y/2) * (w/2) + floor(x/2) + 1]
V = image[ w * h + floor(y/2) * (w/2) + floor(x/2) + 0]

也可以使用色度通道的更复杂的上采样(双线性、立方等),但什么是合适的取决于应用程序。

一旦你有了YUV像素,你就需要解释它。如果您更喜欢在RGB中操作,可以在Wikipedia上使用这些JPEG转换方程来获得RGB值。

或者,您可以仅使用较大的V (Cr)正值来表示红色,特别是当U (Cb)较小时。

票数 9
EN

Stack Overflow用户

发布于 2012-12-05 13:49:45

从Reuben在Converting YUV->RGB(Image processing)->YUV during onPreviewFrame in android?中的回答

可以使相机预览使用RGB格式,而不是YUV格式。

试试这个:

Camera.Parameters.setPreviewFormat(ImageFormat.RGB_565);

票数 1
EN

Stack Overflow用户

发布于 2012-12-05 09:19:52

YUV只是另一种颜色空间。您可以在YUV空间中定义红色,就像在RGB空间中一样。一个简单的calculator建议RGB值255,0,0 (红色)应该在YUV空间中显示为类似76,84,255的值,所以只需查找接近该值的值即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13714232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档