0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCVのHSV色空間の範囲について

Last updated at Posted at 2023-10-12

RGB画像の特定の色を抜き出すときは、RGBからHSVに変換してinRange関数を使ってマスク画像を生成する方法が一般的だと思うんだけど、その時の色の範囲について備忘録としてまとめます。

ちなみに全然ドキュメントに書いてある。

S(Saturation,彩度)とV(Value,明度)は0~255

H(Hue,色相)はお絵描きソフト(PhotoShop,ClipStadio)では0~100か0~360に設定されているが、openCVの内部的には0~255の値を持つらしい。しかし入力には0~180を期待していて、181階調から256階調に内部で変換している。

なんで0から180なんだろう...0~360でも良くない?

ご存知の方いたら後学のために理由を教えていただけると幸いです。


サンプルコード

import numpy as np
import cv2

# 緑色の検出
def detect_green(hsv):
    hsv_min = np.array([50, 100, 100])
    hsv_max = np.array([65, 255, 255])
    msk = cv2.inRange(hsv, hsv_min, hsv_max)

    # マスク画像の確認
    cv2.imwrite('sample_msk.png', msk)
    # cv2.imshow('green', msk)
    # cv2.waitKey(0)
    # cv2.destroyWindow('green')

    # 白い領域(検出したい色)があるかどうか
    if len(msk[msk.nonzero()]) >= 1:
        return True
    else:
        return False

    # 全然こっちでいい
    # return True if len(msk[msk.nozero()]) >= 1 else False

rgb = cv2.imread('sample.png')
hsv = cv2.cvtColor(rgb, cv2.COLOR_BGR2HSV)

if detect_green(hsv):
    print('detect')
else:
    print('can\'t detect')

sample.png
sample.png

sample_msk.png
sample_msk.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?