- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
將圖像從NV12(YUV420p)顏色空間轉換為BGR。
該函數將輸入圖像從NV12顏色空間轉換為RGB。Y、U和V通道值的常規范圍是0到255。
輸出圖像必須是8位無符號3通道圖像(CV_8UC3)。
注意:
函數的文本ID是"org.opencv.imgproc.colorconvert.nv12tobgr"
函數原型
GMat cv::gapi::NV12toBGR 、
(const GMat & src_y,const GMat & src_uv
)
參數
- 參數src_y - 輸入圖像:8位無符號單通道圖像(CV_8UC1)。
- 參數src_uv - 輸入圖像:8位無符號雙通道圖像(CV_8UC2)。
返回值:
返回一個新的 GMat 對象,表示從輸入的 NV12 圖像數據轉換得到的 BGR 格式的圖像數據。
使用場景
當你需要處理來自攝像頭或其他影像設備的數據時,這些設備可能會輸出 NV12 格式的圖像數據。為了進行進一步的色彩處理或者顯示,你可能需要將其轉換為更常見的 BGR 格式。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 假設我們有一個NV12格式的圖像int width = 640;int height = 480;// 創建NV12格式的數據(這里用隨機數據填充以顯示顏色變化)std::vector<uchar> nv12_data((width * height * 3) / 2);// 初始化Y平面for (int i = 0; i < width * height; ++i) {nv12_data[i] = rand() % 256; // Y plane}// 初始化UV平面for (int i = 0; i < width * height / 2; ++i) {nv12_data[width * height + i] = rand() % 256; // UV plane}// 定義Y平面和UV平面cv::Mat y_plane(height, width, CV_8UC1, nv12_data.data());cv::Mat uv_plane(height / 2, width / 2, CV_8UC2, nv12_data.data() + (width * height));// 定義G-API圖cv::GMat in_y, in_uv;auto out = cv::gapi::NV12toBGR(in_y, in_uv);cv::GComputation comp(cv::GIn(in_y, in_uv), cv::GOut(out));cv::Mat bgrImg;try {// 應用到輸入圖像并獲取輸出圖像comp.apply(cv::gin(y_plane, uv_plane), cv::gout(bgrImg),cv::compile_args(cv::gapi::kernels()));// 顯示結果cv::imshow("BGR image", bgrImg);cv::waitKey();}catch(const cv::Exception& e) {std::cerr << "OpenCV exception: " << e.what() << std::endl;}catch(const std::exception& e) {std::cerr << "Error: " << e.what() << std::endl;}return 0;
}