房產(chǎn)網(wǎng)站開發(fā)文檔合肥seo軟件
需求背景
開發(fā)rk3588 音視頻硬件編解碼,然后看見他的輸入文件格式。。 只能是裸的文件。不能是壓縮過的。就是不能是jpg/png這種格式,只能是以下的圖像/視頻 的存儲格式.那么我沒有這個格式的,以前hi3559的bgr格式和他要的也不太一致,然后去搜了以下,發(fā)現(xiàn)他要的這個還算是標準格式的
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_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} )
主函數(shù)就是cv2.cpp,使用的時候需要把這個存儲為CMakeLists.txt,和cv2.cpp放在同一個路徑下,當然,前提是你的系統(tǒng)有裝opencv,我的版本是4.5.5
opencv 主函數(shù)
如果圖像的格式是BGR888,表示每個像素由藍色(Blue)、綠色(Green)、紅色(Red)各占8位,總共24位。網(wǎng)上看了很多,沒有說怎么直接存的,但是他們說Opencv讀取進來就是 bgr888,這樣的話,想著就直接使用文件讀寫往里寫就可以了。
確實就寫進去了。在rk3588的編解碼應用中可以正常使用編碼。
#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);//程序?qū)⒚總€通道的值以二進制形式寫入文件,并使用std::ios::binary標志打開文件,以確保以二進制形式寫入數(shù)據(jù)。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數(shù)據(jù)寫入文件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"; // 每行結(jié)束后換行}// 關閉文件outputFile.close();std::cout << "Mat數(shù)據(jù)已成功寫入文件。" << std::endl;// Mat image1;// cvtColor(image1, image, COLOR_BGR2YUV_I420);}
cv::Vec3b
表示一個包含三個uchar(unsigned char)元素的向量,分別表示藍色、綠色和紅色通道的強度。
如果存儲yuv等格式,需要使用cvtColor(inputImage, grayImage, COLOR_BGR2YUV);這個函數(shù)進行轉(zhuǎn)換,然后進行存儲,存儲的地方應該還需要根據(jù)對應的格式修改