首页 > 其他分享 >NV12数据转OpenCV的Mat

NV12数据转OpenCV的Mat

时间:2024-12-20 21:08:51浏览次数:4  
标签:Mat OpenCV int height bgrImage width NV12

// 将 NV12 转换为 BGR
void nv12ToBgr(const unsigned char* yuvData, int width, int height, Mat& bgrImage) {
    // 计算每个平面的大小
    int ySize = width * height;
    int uvSize = (width / 2) * (height / 2);

    // 创建一个包含 NV12 数据的 Mat 对象
    Mat nv12(height + height / 2, width, CV_8UC1, const_cast<unsigned char*>(yuvData));

    // 直接使用 OpenCV 的颜色转换函数进行 NV12 到 BGR 的转换
    cvtColor(nv12, bgrImage, COLOR_YUV2BGR_NV12);
}

 

#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
using namespace cv;

// 将 NV12 转换为 BGR
void nv12ToBgr(const unsigned char* yuvData, int width, int height, Mat& bgrImage) {
    // 计算每个平面的大小
    int ySize = width * height;
    int uvSize = (width / 2) * (height / 2);

    // 创建一个包含 NV12 数据的 Mat 对象
    Mat nv12(height + height / 2, width, CV_8UC1, const_cast<unsigned char*>(yuvData));

    // 直接使用 OpenCV 的颜色转换函数进行 NV12 到 BGR 的转换
    cvtColor(nv12, bgrImage, COLOR_YUV2BGR_NV12);
}

int main() {
    // OpenCV 版本号
    cout << "OpenCV_Version: " << CV_VERSION << endl;

    string filePath = "f.nv12";
    ifstream file(filePath, ios::binary | ios::ate);

    if (!file.is_open()) {
        cerr << "无法打开文件: " << filePath << endl;
        return -1;
    }

    streamsize size = file.tellg();
    file.seekg(0, ios::beg);

    vector<char> buffer(size);
    if (!file.read(buffer.data(), size)) {
        cerr << "无法读取文件: " << filePath << endl;
        return -1;
    }

    int width = 640;  // 假设宽度为 640
    int height = 480; // 假设高度为 480

    Mat bgrImage;
    nv12ToBgr(reinterpret_cast<const unsigned char*>(buffer.data()), width, height, bgrImage);

    // 显示图像
    imshow("NV12 to BGR", bgrImage);
    waitKey(0);

    return 0;
}

  

标签:Mat,OpenCV,int,height,bgrImage,width,NV12
From: https://www.cnblogs.com/ahuo/p/18619980

相关文章

  • PyQt5与OpenCV结合的三个小练习
    题目1、简单图像处理创建一个PyQt应用程序,该应用程序能够:1、使用OpenCV加载一张图像。2、在PyQt的窗口中显示这张图像。3、提供四个按钮(QPushButton):一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行翻转一个用于将图像进行旋转4、当用......
  • MATLAB仿真基于切片宽带光源的微波光子滤波器(MPF)
    1.基于切片宽带光源的微波光子滤波器基本结构2.计算公式切片后光谱:其中E为宽带光源光谱,可以是矩形光谱也可以是高斯光谱色散介质传递函数:MPF频率响应:通带中心频率计算为3.仿真结果假设色散介质为75km单模光纤,切片光谱为高斯光源+FP干涉仪,FP腔长2mm,干涉可......
  • ~~和Math.floor有什么区别?
    在前端开发中,~~和Math.floor都可以用于取整,但它们的工作原理和结果在某些情况下是不同的。~~操作符:~~是一个双位非操作符,它首先对一个数字进行一次位非操作,然后再进行一次。这个操作的效果是将浮点数转换为整数,但它并不是简单的向下取整,而是向零取整。也就是说,对于正数,......
  • 计及多能耦合的区域综合能源系统电气热能流计算研究(Matlab代码实现)
    ......
  • 【多源数据融合】基于Dempster-Shafer理论的信念对数相似度测量及其在多源数据融合中
     ......
  • 【Unity 计算机视觉插件】OpenCV for Unity 轻松实现图像处理、目标检测、物体识别、A
    OpenCVforUnity是一款功能强大的Unity插件,将著名的计算机视觉库OpenCV无缝集成到Unity中,为开发者提供丰富的计算机视觉功能支持。通过该插件,开发者可以轻松实现图像处理、目标检测、物体识别、AR增强现实等复杂功能,适用于多种平台,包括Windows、macOS、Android、iOS等。功......
  • 排队算法的matlab仿真,带GUI界面
    1.程序功能描述排队算法的matlab仿真,带GUI界面。分别仿真单队列单服务台,单队列多服务台以及多队列多服务台三种排队方式。2.测试软件版本以及运行结果展示MATLAB2022A版本运行 3.核心程序function[Blocking_Rate,Use_Rate]=func_mms2(Time_Arrival,Time_Server,N......
  • MATH GR5280, Capital Markets & Investments
    MATHGR5280,CapitalMarkets&InvestmentsStartdate:12/7/2024Duedate:12/21/20241FinalProjectNote:AllfilesandinformationrelatedtothefinalprojectareuploadedintotheModulesstartingwith“FinalProject”prefixonCourseWorks.The......
  • 基于OpenCV和Python的人脸识别系统
    一、系统概述基于OpenCV和Python的人脸识别系统利用先进的算法和工具,提供高效、准确的人脸识别服务。该系统可以应用于安全监控、门禁系统、移动支付、智能设备解锁等多个场景,具有广泛的应用价值和商业价值。二、核心组件OpenCV:OpenCV是一个开源的计算机视觉和机器学习......
  • 鸿蒙开发-使用animateTo 制作动画
    在鸿蒙应用开发中,使用ArkTS版本制作动画是一个重要的技能。以下是一些关于如何在ArkTS中制作动画的详细步骤和示例:一、动画类型粒子动画(Particle):粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。动画元素是一个个粒子,这些粒子可以是圆点、图片等。通......