bgrをHsvに変換する(Matlab、OpenCV、Emgucv)



Convert Bgr Hsv Matlab



画像内の特定の色(赤、緑、黄色など)を識別するために、カラー画像はHSV画像に変換されることが多く、HSV値の範囲を制限することで必要な色を取得できます。

  1. HSVモデル
    逆円錐モデルであるHSVは、色、深さ、明るさの観点から説明されています。
    Hは色を意味し、色相も意味します
    Sは深さを意味し、S = 0の場合、グレースケールと彩度のみ
    Vは、明るさ、色の明るさ、および明るさを表します。この値は、光の強度とは直接関係ありません。
    RGBからHSVへの公式:
    画像
    異なるソフトウェアプログラミングでは、H値の取得の詳細はわずかに異なります。
  2. MatlabでrgbをHsvに変換する
**hv0 = rgb2hsv(I0)** figureimshow(I0)title('Color original image') % You can see the three HSV channels of a picture through the following program H0=hv0(:,:,1)* 255 S0=hv0(:,:,2)* 255 V0=hv0(:,:,3)* 255

rgb2hsvによって変換されたhv0は浮動小数点数であるため、後続のチャネル処理および表示では、チャネルごとに* 255です。
画像
カラー画像I0(:、:、1)-> R I0(:、:、2)-> G I0(:、:、3)-> B
3. opencv(3.0)rgbをhsvに変換します



Mat bgrimage = imread('C:\1.bmp') Mat hsvimage **cvtColor(bgrimage, hsvimage, CV_BGR2HSV)**

opencv
bgrimage.at(i、j).val [0]-> B
bgrimage.at(i、j).val [1]-> G
bgrimage.at(i、j).val [2]-> R

hsvimage.at(i、j).val [0]-> H
hsvimage.at(i、j).val [1]-> S
hsvimage.at(i、j).val [2]-> V
ここで変換する必要はありません。マットHSV図を直接表示できます。
4.Emgucv変換



private Image byte> bgrImg//Original color image private Imagebyte> hsvImg//Convert to Hsv image hsvImg = new Imagebyte>(bgrImg.Width, bgrImg.Height) hsvImg = **bgrImg.Convertbyte>()** Or hsvImg = new Imagebyte>(bgrImg.Width, bgrImg.Height) CvInvoke.CvtColor(bgrImg, hsvImg, Emgu.CV.CvEnum.ColorConversion.Bgr2Hsv) pictureBox1.Image = hsvImg.Bitmap

エラー形式:

Image bgrFImg = new Image(bgrImg.Width, bgrImg.Height) Image hsvFImg = new Image(bgrImg.Width, bgrImg.Height) hsvImg = new Image(bgrImg.Width, bgrImg.Height) CvInvoke.cvConvertScale(bgrImg, bgrFImg, 1.0, 0)//Convert the original image to float type CvInvoke.CvtColor(bgrFImg, hsvFImg, Emgu.CV.CvEnum.ColorConversion.Bgr2HsvFull) CvInvoke.cvConvertScale(hsvFImg, hsvImg, 1.0, 0)

この方法で得られるSは常に0に等しい