么得钱钱

么得钱钱

7个粉丝

9

问答

7

专栏

5

资料

么得钱钱  发布于  2023-05-24 11:35:33
采纳率 0%
9个问答
752

VI 图像是 NV12 格式,想要输出到VO时显示为GRAY8格式,有没有例子可以参考?

如题。VI 图像是 NV12 格式,想要输出到VO时显示为GRAY8格式,有没有例子可以参考?

我来回答
回答1个
时间排序
认可量排序

来自远方

16个粉丝

31

问答

40

专栏

132

资料

来自远方 2023-05-24 14:52:36
认可0

将RV1126开发板上VI采集的NV12格式图像转换成GRAY8并输出到VO,可以通过以下步骤实现:

1、使用V4L2接口从VI设备中获取NV12格式的视频帧数据。
2、根据NV12格式的数据结构,分别获取Y和UV分量的指针,以及图像宽度和高度等参数。
3、创建QImage对象,并指定图像宽度、高度和目标格式(GRAY8):
QImage grayImage(width, height, QImage::Format_Grayscale8);
4、将NV12数据拷贝到QImage对象中。由于NV12格式是半平面格式,需要分别处理Y和UV分量。

unsigned char *yData = (unsigned char *)framePtr->data; // 获取Y分量数据指针
unsigned char *uvData = yData + width * height; // 获取UV分量数据指针

for (int h = 0; h < height; h++) {
    unsigned char *line = grayImage.scanLine(h); // 获取当前行的指针
    for (int w = 0; w < width; w++) {
        int y = yData[w + h * width]; // 获取当前像素的Y分量
        int u = uvData[(w / 2) * 2 + (h / 2) * width]; // 获取当前像素的U分量
        int v = uvData[(w / 2) * 2 + (h / 2) * width + 1]; // 获取当前像素的V分量

        // 将YUV分量转换为灰度值
        int gray = qGray(y, u, v);

        // 将灰度值写入QImage对象中
        line[w] = static_cast<unsigned char>(gray);
    }
}

其中,framePtr是从VI设备获取的视频帧数据。
5、在VO上显示图像,可以使用Qt提供的QPainter类绘制:

QPainter painter(vo);
painter.drawImage(x, y, grayImage);

其中,vo是用于显示图像的QWidget对象,x和y是需要绘制图像的左上角坐标。

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区