qt qimage 获取rgb 图像转yuv教程(一)

 

在图像处理时,我们经常会取图像的rgb,然后把rgb转为yuv 再h264编码

qt中图像处理一般是qimage,我们可以把普通的一张图片,提取出rgb

首先,可以用QLabel  显示图像

 

定义一个:QLabel *imageview;

定义一个:QImage image

QPixmap pixmap = QPixmap::fromImage(image); //从QImage中获取像素map
	//QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);  // 饱满填充
	QPixmap fitpixmap = pixmap.scaled(with, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);  // 按比例缩放
	ui->imageview->setPixmap(fitpixmap);  //显示在label上

 

取rgb

    //定义一个char指针存放rgb字节流,长度为图像的宽*高*3(r,g,b)  3个字节,rgb24 
    unsigned char *rgbbuf = (unsigned char *)malloc(w*h * 3);
    //yuv  宽*高*3/2   y,u,v  
	unsigned char *yuvbuf = (unsigned char *)malloc(w*h * 1.5);
	///获取rbg
	for (int row = 0; row < h; ++row) 
		for (int col = 0; co
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,请稍等,我正在为您查找相关的信息。首先,YUV 是一种颜色编码格式,它将图像分为亮度和色度两个分量,RGB 则是将图像分为红、绿、蓝三个分量。YUV420P 是一种常见的 YUV 格式,其中 P 表示平面存储。而 RGB24 则是一种 24 位的 RGB 格式,其中每个像素值用 3 个字节表示。 针对您的问题,可以使用 Qt 中的 QImage 类来实现 YUV420P 到 RGB24 的换。具体步骤如下: 1. 读取 YUV420P 数据,并将其换为 RGB24 数据: ```c++ void yuv420p_to_rgb24(unsigned char *yuv, unsigned char *rgb, int width, int height) { int size = width * height; int w2 = width / 2, h2 = height / 2; int uv_size = w2 * h2; unsigned char *y = yuv, *u = yuv + size, *v = yuv + size + uv_size; int r, g, b; for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int index = j * width + i; int y_value = y[index]; int u_value = u[(j / 2) * w2 + (i / 2)]; int v_value = v[(j / 2) * w2 + (i / 2)]; r = y_value + 1.402 * (v_value - 128); g = y_value - 0.344 * (u_value - 128) - 0.714 * (v_value - 128); b = y_value + 1.772 * (u_value - 128); r = r < 0 ? 0 : r; g = g < 0 ? 0 : g; b = b < 0 ? 0 : b; r = r > 255 ? 255 : r; g = g > 255 ? 255 : g; b = b > 255 ? 255 : b; rgb[index * 3] = r; rgb[index * 3 + 1] = g; rgb[index * 3 + 2] = b; } } } ``` 2. 创建 QImage 对象,并将 RGB 数据填充进去: ```c++ QImage image(rgb, width, height, QImage::Format_RGB888); ``` 通过以上代码,您可以实现 YUV420P 到 RGB24 的换,将结果显示在界面上需要使用 QLabel 或者 QPaintDevice。 希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑贝是条狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值