簡體   English   中英

將HSV數據從基數255轉換為基數359

[英]Converting HSV data from base 255 to base 359

我正在使用emgucv。

我想做hsl過濾。

顏色范圍是0到359。

我正在過濾黃色,所以我正在尋找30到60的色調。

我加載一個現有的位圖並將其加載為hsv圖像:

var img = new Image<Hsv, int>(@"D:\yellow.jpg");

當我運行這個時,我得到:

System.NotSupportedException: 'There is an error converting Emgu.CV.Structure.Bgr to Emgu.CV.Structure.Hsv: Requested value 'Bgr2Bgr' was not found.'

我能做到這一點:

var img = new Image<Hsv, byte>(@"D:\yellow.jpg");

並且加載正常,但字節值最多只能達到255。

我還能嘗試什么? 我是否必須將每個“像素”數據乘以值* 255/359?

最簡單的方法是讀取文件。 這應該給你一個RGBA圖像。 將RGBA轉換為BGR,然后從BGR轉換為HLS。

我這樣使用墊子:

Mat src = new Mat(@"D:\yellow.jpg");
Mat Bgr = new Mat();
Mat Hls = new Mat();
CvInvoke.CvtColor(src, Bgr, ColorConversion.Rgba2Bgr);
CvInvoke.CvtColor(Bgr, Hls, ColorConversion.Bgr2Hls);

我認為確實如此。 你想做HSL過濾,它告訴我你需要HSL格式的圖像。 在OpenCV的所有情況下,HSV,HSL等僅轉到255,因此它們非常適合8位圖像的字節。 如果使用32位深度,則值不變。 不支持16位圖像。 對於HSV,Hue的值為0 - 180(我使用帶有8位無符號值的BGR),我只需乘以或除以2,但只有當我需要向用戶顯示此值或獲取Hue值時,這才是必需的來自用戶。 最終,它對我如何在內部使用Hue值沒有影響。

HSL的處理方式完全相同,8位的Hue值為0 - 180,不支持16位,32位保持不變。

道格

暫無
暫無

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

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