Color Space

7847 ワード

Ⅰ. 色空間の変更

  • dst = cv.cvtColor(src, code)
  • src : input image
  • code:色変換コード

  • 色変換コード
  • COLOR BGR 2 GRAY:BGRから階調
  • COLOR BGR 2 HSV:BGR~HSV(8ビット画像のH範囲0~179)
  • COLOR GRAY 2 BGR:1チャネルから3チャネル
  • 等々
  • import cv2
    
    color_img = cv2.imread("src/ex_codes/opencv.png", cv2.IMREAD_COLOR)
    grayscale_img = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow("color", color_img)
    cv2.imshow("grayscale", grayscale_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Ⅱ. チャネルの切断/マージ

  • mv = cv.split(m):チャネル切断
  • dst = cv.merge(mv):統合チャネル
  • import cv2
    
    src = cv2.imread("src/ex_codes/opencv.png", cv2.IMREAD_COLOR)
    b, g, r = cv2.split(src)
    inversebgr = cv2.merge((r, g, b))
    
    cv2.imshow("b", b)
    cv2.imshow("g", g)
    cv2.imshow("r", r)
    cv2.imshow("inverse", inversebgr)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Ⅲ. masking


  • HSV色空間でよく使われます(特定の色や輝度の画素だけを抽出したい場合)
  • dst = cv.inRange(src, lowerb, upperb):チャンネル別マスク
  • src:input画像
  • lowerb:各チャンネルの閾値標準差
  • upper b:各チャネルの上限値Andarray
  • dst = cv.bitwise_and(src1, src2 , mask = mask):画素間ビット演算
  • src 1:最初の画像
  • src 2:2番目の画像
  • mask:演算範囲
  • import cv2
    import numpy as np
    
    src = cv2.imread("src/ex_codes/person.jpeg", cv2.IMREAD_COLOR)
    hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
    
    mask = cv2.inRange(hsv, np.array([0, 0, 200]), np.array([255, 255, 255]))
    res = cv2.bitwise_and(src, src, mask = mask)
    
    cv2.imshow('frame', src)
    cv2.imshow('mask', mask)
    cv2.imshow('res', res)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()