- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
将图像从NV12 (YUV420p)色彩空间转换为BGR。该函数将输入图像从NV12色彩空间转换为BGR格式。Y, U, 和 V通道值的常规范围是0到255。
输出图像必须是一个8位无符号平面3通道图像 CV_8UC1。平面图像内存布局是在内存中连续排列的三个平面,因此图像的高度应该是plane_height*plane_number,图像类型为CV_8UC1。
注意:
函数文本ID为"org.opencv.imgproc.colorconvert.nv12torgbp"
函数原型
GMatP cv::gapi::NV12toBGRp
(
const GMat & src_y,
const GMat & src_uv
)
参数
- 参数 src_y:输入图像:8位无符号1通道图像 CV_8UC1。
- 参数 src_uv:输入图像:8位无符号2通道图像 CV_8UC2。
代码示例
#include <opencv2/opencv.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/gapi/imgproc.hpp>
int main() {
// 假设我们有一个宽度为640像素,高度为480像素的图像
int width = 640;
int height = 480;
// 创建Y和UV平面的Mat对象
cv::Mat yPlane(height, width, CV_8UC1); // Y 平面
cv::Mat uvPlane(height / 2, width / 2, CV_8UC2); // UV 平面
// 这里我们可以填充一些假数据作为示例
// 实际上,这些数据应该来自你的数据源(例如,视频解码)
randu(yPlane, cv::Scalar(0), cv::Scalar(255));
randu(uvPlane, cv::Scalar(0), cv::Scalar(255));
// 定义G-API图
cv::GMat src_y, src_uv;
auto bgrp = cv::gapi::NV12toBGRp(src_y, src_uv);
cv::GComputation comp(cv::GIn(src_y, src_uv), cv::GOut(bgrp));
// 创建输出矩阵
cv::Mat out_bgrp;
// 应用计算图并执行转换
comp.apply(yPlane, uvPlane, out_bgrp,
cv::compile_args(cv::gapi::kernels()));
// 将结果转换为BGR格式以便显示
// 注意:由于BGRP是平面格式,我们可能需要调整它以正确显示
// 在这个例子中,直接展示out_bgrp可能不会得到预期的结果,因为它是平面格式。
// 对于展示目的,我们假设你已经将BGRP转换为连续的BGR格式,这通常涉及到一些额外的数据重组步骤。
// 示例中简化处理,直接尝试展示转换后的图像
cv::imshow("Converted BGR Image", out_bgrp);
cv::waitKey(0);
return 0;
}