opencv 存储bgr格式/同理可类推yuv

需求背景

开发rk3588 音视频硬件编解码,然后看见他的输入文件格式。。 只能是裸的文件。不能是压缩过的。就是不能是jpg/png这种格式,只能是以下的图像/视频 的存储格式.那么我没有这个格式的,以前hi3559的bgr格式和他要的也不太一致,然后去搜了以下,发现他要的这个还算是标准格式的

c 复制代码
mpi: color: id 0     0x00000 YUV420SP,      NV12
mpi: color: id 1     0x00001 YUV420SP-10bit
mpi: color: id 2     0x00002 YUV422SP,      NV24
mpi: color: id 3     0x00003 YUV422SP-10bit
mpi: color: id 4     0x00004 YUV420P,       I420
mpi: color: id 5     0x00005 YUV420SP,      NV21
mpi: color: id 6     0x00006 YUV422P,       422P
mpi: color: id 7     0x00007 YUV422SP,      NV42
mpi: color: id 8     0x00008 YUV422-YUYV,   YUY2
mpi: color: id 10    0x0000a YUV422-UYVY,   UYVY
mpi: color: id 12    0x0000c YUV400-Y8,     Y800
mpi: color: id 15    0x0000f YUV444SP
mpi: color: id 16    0x00010 YUV444P
mpi: color: id 65536 0x10000 RGB565
mpi: color: id 65537 0x10001 BGR565
mpi: color: id 65538 0x10002 RGB555
mpi: color: id 65539 0x10003 BGR555
mpi: color: id 65542 0x10006 RGB888
mpi: color: id 65543 0x10007 BGR888
mpi: color: id 65546 0x1000a ARGB8888
mpi: color: id 65547 0x1000b ABGR8888
mpi: color: id 65548 0x1000c BGRA8888
mpi: color: id 65549 0x1000d RGBA8888

先贴一段cmake文件

想要蹭个关注 所以水个cmake

cmake 复制代码
cmake_minimum_required(VERSION 2.8)
project( cvtest )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( demo cv2.cpp )
target_link_libraries( demo ${OpenCV_LIBS} )

主函数就是cv2.cpp,使用的时候需要把这个存储为CMakeLists.txt,和cv2.cpp放在同一个路径下,当然,前提是你的系统有装opencv,我的版本是4.5.5

opencv 主函数

如果图像的格式是BGR888,表示每个像素由蓝色(Blue)、绿色(Green)、红色(Red)各占8位,总共24位。网上看了很多,没有说怎么直接存的,但是他们说Opencv读取进来就是 bgr888,这样的话,想着就直接使用文件读写往里写就可以了。

确实就写进去了。在rk3588的编解码应用中可以正常使用编码。

cpp 复制代码
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/core/types.hpp>
#include "opencv4/opencv2/imgproc/imgproc_c.h"

#include "opencv2/core/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <fstream>
using namespace cv;
using namespace std;
int main(int argc, char** argv ){
    cout<< "this test is for bgr picture store"<<endl;
    Mat image;
    image = imread( "./my.jpg", 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    printf("opencv version is %s\r\n",CV_VERSION);
    ofstream outputFile("./sample.bgr", std::ios::out | std::ios::binary);//程序将每个通道的值以二进制形式写入文件,并使用std::ios::binary标志打开文件,以确保以二进制形式写入数据。
     if (!outputFile.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1; // 退出程序并返回错误代码
    }
    int rows = image.rows;
    int cols = image.cols;
    cout<<"rows is "<<rows<<" cols is "<<cols<<endl;
        // 将Mat数据写入文件
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
             cv::Vec3b pixel = image.at<cv::Vec3b>(i, j);
            outputFile.write(reinterpret_cast<char*>(&pixel[2]), 1);  // 红色
            outputFile.write(reinterpret_cast<char*>(&pixel[1]), 1);  // 绿色
            outputFile.write(reinterpret_cast<char*>(&pixel[0]), 1);  // 蓝色
            
        }
        // outputFile << "\n";  // 每行结束后换行
    }

    // 关闭文件
    outputFile.close();

    std::cout << "Mat数据已成功写入文件。" << std::endl;
    // Mat image1;
    // cvtColor(image1, image, COLOR_BGR2YUV_I420);
    
}

cv::Vec3b表示一个包含三个uchar(unsigned char)元素的向量,分别表示蓝色、绿色和红色通道的强度。

如果存储yuv等格式,需要使用cvtColor(inputImage, grayImage, COLOR_BGR2YUV);这个函数进行转换,然后进行存储,存储的地方应该还需要根据对应的格式修改

相关推荐
YSGZJJ44 分钟前
股指期货的套保策略如何精准选择和规避风险?
人工智能·区块链
无脑敲代码,bug漫天飞1 小时前
COR 损失函数
人工智能·机器学习
HPC_fac130520678162 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
安静读书4 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小陈phd4 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
Guofu_Liao5 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
ZHOU_WUYI9 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1239 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
老艾的AI世界10 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK2215110 小时前
机器学习系列----关联分析
人工智能·机器学习