簡體   English   中英

OpenCV - 如何將灰度轉換為顏色 (CV_8UC3)?

[英]OpenCV - How to convert grayscale to color (CV_8UC3)?

我正在嘗試將兩個 Mat 對象添加在一起,但我遇到了錯誤。

這是工作代碼:

    Mat src1, src2, dst;

    /// Read image ( same size, same type )
    src1 = imread("lion.png");
    src2 = imread("bluebell.png");

    dst = src1 + 0.5 * src2;

    imshow("Blend", dst);

    waitKey(0);
    return 0;

src1src2都具有相同的類型,即CV_8UC3 但是當我嘗試這個時:

    Mat src1, src2, src3, dst;

    /// Read image
    src1 = imread("lion.png");
    src2 = imread("bluebell.png", IMREAD_GRAYSCALE);
    src2.convertTo(src3, COLOR_GRAY2RGB);

    cout << "src1.type " << src1.type() << endl;
    cout << "src2.type " << src2.type() << endl;
    cout << "src3.type " << src3.type() << endl;

    dst = src1 + 0.5 * src3;

    imshow("Blend", dst);

    waitKey(0);
    return 0;

它不起作用。 因為src2src3都具有類型0 ,即CV_8U 但我希望src3具有類型16 ,即CV_8UC3 (根據此處)。 此代碼帶來此錯誤:

OpenCV 錯誤:輸入參數的大小不匹配(操作既不是“數組操作數組”(其中數組具有相同的大小和相同的通道數),也不是“數組操作標量”,也不是“標量操作數組”) cv::arithm_op

如何將灰度圖像轉換為具有CV_8UC3確切類型的彩色圖像?

您不能通過調用convertTo來更改頻道數。 根據參考

所需的輸出矩陣類型或深度,因為通道與輸入相同 如果 rtype 為負,則輸出矩陣將與輸入具有相同的類型。

當您有一個灰度通道的矩陣時,您可以使用cv::merge通過將 BGR 通道的這一組件放入新矩陣中來創建 3 個通道圖像:

src1 = imread("lion.png");
src2 = imread("bluebell.png", IMREAD_GRAYSCALE);    // one channel

cv::merge(std::vector<cv::Mat>{src2, src2, src2}, src2);
                            // blue, green,red    as output 3-channels mat
dst = src1 + 0.5 * src2;

通過調用convertTo ,您可以轉換存儲值的數據類型,例如從整數轉換為浮點數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM