[英]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;
src1
和src2
都具有相同的類型,即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;
它不起作用。 因為src2
和src3
都具有類型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.