AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 파이썬
  • 연습문제
  • OpenCV
  • LEVEL2
  • 백준
  • 알고리즘
  • level1
  • 프로그래머스
  • 이코테
  • Python

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV with Python]영상처리 : 특정 색상 영역 추출
OpenCV

[OpenCV with Python]영상처리 : 특정 색상 영역 추출

2022. 2. 1. 14:05
특정 색상 영역 추출

 

특정 색상 영역 추출할 때 HSV 색 공간을 이용하는게 좋다.

RGB는 어두운 사진에서 색상 영역 추출하면 잘 되지 않는다. HSV는 H,S로 색상을 조절하고 V는 밝기를 조절하므로 H와 S 범위만 지정해 준다면 어두운 영상에서도 색상 영역 추출을 할 수 있다.

 

 

RGB 색 공간에서 녹색 영역 추출하기

 

명도를 낮췄을 경우

 

명도를 낮췄을 경우 녹색이 제대로 잡히지 않은 것을 볼 수 있다.

 

import sys
import numpy as np
import cv2


src = cv2.imread('candies.png') # 원본 이미지
src2 = cv2.imread('candies2.png') # 명도가 낮은 이미지

if src is None:
    print('Image load failed!')
    sys.exit()


dst1 = cv2.inRange(src, (0, 128, 0), (100, 255, 100))
dst2 = cv2.inRange(src2, (0, 128, 0), (100, 255, 100))

cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('src2', src2)
cv2.imshow('dst2', dst2)
cv2.waitKey()

cv2.destroyAllWindows()

 

 

HSV 색 공간에서 녹색 영역 추출하기

 

명도를 낮췄을 경우

 

HSV의 경우 명도가 낮은 경우에도 제대로 잡아내는 것을 볼 수 있다. 

 

import sys
import numpy as np
import cv2

src = cv2.imread('candies.png')  # 원본 이미지
src2 = cv2.imread('candies2.png')  # 명도가 낮은 이미지

if src is None:
    print('Image load failed!')
    sys.exit()

src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
src_hsv2 = cv2.cvtColor(src2, cv2.COLOR_BGR2HSV)

dst1 = cv2.inRange(src_hsv, (50, 150, 0), (80, 255, 255))
dst2 = cv2.inRange(src_hsv2, (50, 150, 0), (80, 255, 255))

cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('src2', src2)
cv2.imshow('dst2', dst2)
cv2.waitKey()

cv2.destroyAllWindows()

 

 

특정 범위 안에 있는 행렬 원소 검출  -  cv2.inRange

cv2.inRange(src, lowerb, upperb, dst=None)
  • src : 입력 행렬
  • lowerb : 하한 값 행렬 또는 스칼라
  • upperb : 상한 값 행렬 또는 스칼라
  • dst : 입력 영상과 같은 크기의 마스크 영상 (numpy.uint8) 
            범위 안에 들어가는 픽셀은 255, 나머지는 0으로 설정

 

트랙바를 이용한 특정 색상 영역 추출

import sys
import numpy as np
import cv2

src = cv2.imread('candies.png')

if src is None:
    print('Image load failed!')
    sys.exit()

src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)


def on_trackbar(pos):
    hmin = cv2.getTrackbarPos('H_min', 'dst')
    hmax = cv2.getTrackbarPos('H_max', 'dst')

    dst = cv2.inRange(src_hsv, (hmin, 150, 0), (hmax, 255, 255))
    cv2.imshow('dst', dst)


cv2.imshow('src', src)
cv2.namedWindow('dst')

cv2.createTrackbar('H_min', 'dst', 50, 179, on_trackbar)
cv2.createTrackbar('H_max', 'dst', 80, 179, on_trackbar)
on_trackbar(0)

cv2.waitKey()

cv2.destroyAllWindows()

 

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] Filtering : 필터링이란?  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 히스토그램 역투영  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 명암비 조절  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 히스토그램 분석  (0) 2022.02.01
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바