OpenCV-Python 색상정보활용법(2)

Yk Lee·2022년 5월 15일
0

AI영상인식실습

목록 보기
5/16

OpenCV-Python활용

예제
이미지에서 Red,Green,Blue 색상 이미지를 OpenCV-Python을 활용하여 구분하기
빨간색 이미지 추출하기~

import cv2
import numpy as np

img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

th_red_low = np.array([0, 100, 100])
th_red_up = np.array([40, 255, 255])
mask_red_img1 = cv2.inRange(img_hsv, th_red_low, th_red_up)

img_red = cv2.bitwise_and(img, img, mask=mask_red_img1)
#bitwise_and: mask 영역에서 서로 공통으로 겹치는 부분 출력
cv2.imshow("BGR",img)
cv2.imshow('MASK (RED)',img_red)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과

연한레드들이 뽑혔다

import cv2
import numpy as np

img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

th_red_low = np.array([150, 100, 100])
th_red_up = np.array([180, 255, 255])
mask_red_img2 = cv2.inRange(img_hsv, th_red_low, th_red_up)

img_red = cv2.bitwise_and(img, img, mask=mask_red_img2)
cv2.imshow("BGR",img)
cv2.imshow('MASK (RED)',img_red)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과

찐한 레드 들이 추출되었다.

import cv2
import numpy as np

img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

th_red_low = np.array([0, 100, 100])
th_red_up = np.array([40, 255, 255])
mask_red_img1 = cv2.inRange(img_hsv, th_red_low, th_red_up)

th_red_low = np.array([150, 100, 100])
th_red_up = np.array([180, 255, 255])
mask_red_img2 = cv2.inRange(img_hsv, th_red_low, th_red_up)

mask_red_img3 = cv2.add(mask_red_img1, mask_red_img2)

img_red = cv2.bitwise_and(img, img, mask=mask_red_img3)
cv2.imshow("BGR",img)
cv2.imshow('MASK (RED)',img_red)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과

위에 두 레드들을 더하여서 뽑으니 정상적으로 원하는 색상을 가진 이미지가 추출되었다.

bitwise_and: mask 영역에서 서로 공통으로 겹치는 부분 출력
bitwise_not: mask된 부분이 어두워지고 mask가 안된 부분이 mask이 된다.

위 일련의 과정들을 거치며

  • 원본 이미지 분석 결과HSV 모델이 적합해 보였다
  • 이를 활용하여 이미지를 구분해본 결과HUE(색상)값 만의 경계값 설정으로 빨강, 초록, 파랑의 이미지가 잘 구분된다.
  • YCbCr모델을 활용해 유사한 결과를 얻을 수 있을 것으로 예상된다.

번외편
녹색부분만 날리기

import cv2
import numpy as np

img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

th_blue_low = np.array([100, 100, 100]) #[95, 50, 70]
th_blue_up = np.array([140, 255, 255]) #[135, 255, 255]
mask_blue_img = cv2.inRange(img_hsv, th_blue_low, th_blue_up)
img_blue = cv2.bitwise_and(img, img, mask=mask_blue_img)

th_green_low = np.array([50, 100, 100])
th_green_up = np.array([90, 255, 255])
mask_green_img = cv2.inRange(img_hsv, th_green_low, th_green_up)
img_green = cv2.bitwise_and(img, img, mask=mask_green_img)

#그린 부분만 날리기 준비
mask_ngreen_img = cv2.bitwise_not(mask_green_img) ## Green 이미지 제거
img_ngreen = cv2.bitwise_and(img, img, mask=mask_ngreen_img)

th_red_low = np.array([0, 100, 100])
th_red_up = np.array([40, 255, 255])
mask_red_img1 = cv2.inRange(img_hsv, th_red_low, th_red_up)

th_red_low = np.array([150, 100, 100])
th_red_up = np.array([180, 255, 255])
mask_red_img2 = cv2.inRange(img_hsv, th_red_low, th_red_up)

mask_red_img3 = cv2.add(mask_red_img1, mask_red_img2)

img_red = cv2.bitwise_and(img, img, mask=mask_red_img3)

cv2.imshow("BGR",img)
cv2.imshow('MASK (BLUE)',img_blue)
cv2.imshow('MASK (GREEN)',img_green)
cv2.imshow('MASK (RED)',img_red)
#그린부분만 날린거 확인하기
cv2.imshow('MASK (NGREEN)',img_ngreen)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과

레드이미지 날리기

import cv2
import numpy as np

img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

th_blue_low = np.array([100, 100, 100]) #[95, 50, 70]
th_blue_up = np.array([140, 255, 255]) #[135, 255, 255]
mask_blue_img = cv2.inRange(img_hsv, th_blue_low, th_blue_up)
img_blue = cv2.bitwise_and(img, img, mask=mask_blue_img)

th_green_low = np.array([50, 100, 100])
th_green_up = np.array([90, 255, 255])
mask_green_img = cv2.inRange(img_hsv, th_green_low, th_green_up)
img_green = cv2.bitwise_and(img, img, mask=mask_green_img)

mask_ngreen_img = cv2.bitwise_not(mask_green_img) ## Green 이미지 제거
img_ngreen = cv2.bitwise_and(img, img, mask=mask_ngreen_img)

th_red_low = np.array([0, 100, 100])
th_red_up = np.array([40, 255, 255])
mask_red_img1 = cv2.inRange(img_hsv, th_red_low, th_red_up)


th_red_low = np.array([150, 100, 100])
th_red_up = np.array([180, 255, 255])
mask_red_img2 = cv2.inRange(img_hsv, th_red_low, th_red_up)

mask_red_img3 = cv2.add(mask_red_img1, mask_red_img2)

img_red = cv2.bitwise_and(img, img, mask=mask_red_img3)

mask_nred_img = cv2.bitwise_not(mask_red_img3) ## red 이미지 제거
img_nred = cv2.bitwise_and(img, img, mask=mask_nred_img)

cv2.imshow("BGR",img)
#cv2.imshow('MASK (BLUE)',img_blue)
#cv2.imshow('MASK (GREEN)',img_green)
#cv2.imshow('MASK (RED)',img_red)
cv2.imshow('MASK (NGREEN)',img_ngreen)
cv2.imshow('MASK (NRED)',img_nred)
cv2.waitKey(0)
cv2.destroyAllWindows()

결과

profile
AR개발자지망생

0개의 댓글