一、 cv::cvtColor簡介
cv::cvtColor是OpenCV中常用的函數之一,用於將圖像從一種顏色空間轉換為另一種顏色空間。它可以將Gray、RGB、HSV、YUV、Lab等多種顏色空間之間進行轉換。
cv::cvtColor函數的定義如下:
void cv::cvtColor(
InputArray src,
OutputArray dst,
int code,
int dstCn = 0
);
其中,各參數的含義如下:
- src:輸入的圖像,可以是8-bit無符號整數、16-bit無符號整數、32-bit或64-bit浮點數型。
- dst:輸出的圖像,類型和大小與src相同。
- code:顏色空間轉換的類型碼,可以採用cv::ColorConversionCode枚舉類型的定義。
- dstCn:輸出圖像的通道數,如果為0表示與輸入圖像通道數相同。
二、常見的顏色空間轉換類型
1. RGB與Gray
將RGB圖像轉換為灰度圖像,使用以下代碼:
cv::Mat src = cv::imread("test.jpg");
cv::Mat gray;
cv::cvtColor(src, gray, cv::COLOR_RGB2GRAY);
2. RGB與HSV
將RGB圖像轉換為HSV圖像,使用以下代碼:
cv::Mat src = cv::imread("test.jpg");
cv::Mat hsv;
cv::cvtColor(src, hsv, cv::COLOR_RGB2HSV);
3. RGB與YUV
將RGB圖像轉換為YUV圖像,使用以下代碼:
cv::Mat src = cv::imread("test.jpg");
cv::Mat yuv;
cv::cvtColor(src, yuv, cv::COLOR_RGB2YUV);
4. RGB與Lab
將RGB圖像轉換為Lab圖像,使用以下代碼:
cv::Mat src = cv::imread("test.jpg");
cv::Mat lab;
cv::cvtColor(src, lab, cv::COLOR_RGB2Lab);
三、cv::cvtColor的一些注意事項
1. 通常情況下,如果輸入圖像是8-bit無符號整數類型,輸出圖像也是8-bit無符號整數類型;如果輸入圖像是32-bit浮點數類型,輸出圖像也是32-bit浮點數類型。
2. 如果輸入圖像的通道數和輸出圖像的通道數不同,那麼必須設置dstCn參數。
3. 在RGB與HSV的互相轉換、RGB與YUV的互相轉換中,OpenCV使用BGR顏色空間。
四、cv::cvtColor的錯誤問題
1. cv::error: (-215: Assertion failed)
這個錯誤通常是由於輸入和輸出圖像大小不一致導致的。解決方法是保證輸入和輸出圖像大小一致。
2. cv::error: (-215: Assertion failed) !_src.empty() in function ‘cv::cvtColor’
這個錯誤通常是由於輸入圖像為空導致的。解決方法是確保輸入圖像不為空。
3. cv::error: (-215: Assertion failed) scn == 3 || scn == 4 in function ‘cv::cvtColor’
這個錯誤通常是由於輸入圖像的通道數不為3或4導致的。解決方法是確保輸入圖像的通道數為3或4。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/188815.html