open CV_6 Track, HSV
import cv2
import numpy as np
def nothing(x):
pass
img = np.zeros((400, 600, 3), np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)
# 색을 조절하는 트랙바 이름 생성
# cv2.createTrackbar(
#trackbar_name, window_name, 초기값, trackbar Max 값, slide 값이 변경 될때 호출 되는 함수)
switch = '0:OFF\n1:On' # ON/ OFF
cv2.createTrackbar(switch, 'image', 1, 1, nothing)
while(1):
# cv2.imshow('image', img)
if cv2.waitKey(1) & 0xFF == 27: # 종료 키 esc
break
r = cv2.getTrackbarPos('R', 'image')
g = cv2.getTrackbarPos('G', 'image')
b = cv2.getTrackbarPos('B', 'image')
s = cv2.getTrackbarPos(switch, 'image')
# 트랙바 띄우기
cv2.imshow('image', img)
if s == 0:
img[:] = 0 # 초기값 검은색 배경
else:
img[:] = [b,g,r]
cv2.destroyAllWindows()
import cv2
import numpy as np
img = cv2.imread('img.jpg')
img2 = cv2.resize(img,(360, 360))
mask = np.zeros_like(img2) #np.zeros_like( () or [] 들어온 숫자 수 만큼 0 배열을 만들어준다.) ex) np.zeros_like([2, 2, 2]) = [0, 0, 0]
cv2.circle(mask, (240, 220), 70, (255, 255, 255), -1)
# (x, y), 반지름, (뒷배경), 속 채우기
masked = cv2.bitwise_and(img2, mask)# bitewise_(연산자) and, or, xor, not
# 이미지, 마스크에 동인한 부분만 출력
cv2.imshow('original', img2)
cv2.imshow('mask', mask)
cv2.imshow('masked', masked)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
src = cv2.imread('ball.png', cv2.IMREAD_COLOR)
src = cv2.resize(src, (200, 360))
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) # cv2,COLOR_BGR2HSV -> 색상공간을 활용해서 빠르게 특정 색상을 검출하고 분리함.
h, s, v = cv2.split(hsv)
#HSV(Hue, Saturation, Value)
#색상, 채도 , 명도
cv2.imshow('img', src)
cv2.imshow("h", h)
cv2.imshow('s', s)
cv2.imshow('v', v)
cv2.waitKey(0)
cv2.destroyAllWindows()
---------------------------# 첫번째 이미지
import cv2
src = cv2.imread('ball.png', cv2.IMREAD_COLOR)
src = cv2.resize(src, (300, 360))
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
# hsv로 바꾸기
h, s, v = cv2.split(hsv)
h = cv2.inRange(h, -1, 10) # -1이 들어가면 배경요소 원본
# 이미지의 낮은 범위에서 높은 범위 사이의 요소를 추출
# 주황색은 약 cv2.inRange(h, 8, 20)
color = cv2.bitwise_and(hsv, hsv, mask=h)
color = cv2.cvtColor(color, cv2.COLOR_HSV2BGR)
# 다시 BGR로 바꿔 출력
cv2.imshow("color", color)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
key = cv2.imread('chroma-key.jpg')
room = cv2.imread('room.jpg')
key = cv2.resize(key, (500, 500))
room = cv2.resize(room, (500, 500))
height1, width1 = key.shape[:2] # channel 제외 ex) (853, 1280, 3) -> (853, 1280)
height2, width2 = room.shape[:2]
x = (width2 - width1) // 2
y = height2 - height1
w = x + width1
h = y + height1
#크로마키 영역을 10 픽셀로 지정
chromakey = key[:10, :10, :] # (10, 10, 3)
offset = 20
#HSV(Hue, Saturation, Value)
#색상, 채도 , 명도
hsv_chroma = cv2.cvtColor(chromakey, cv2.COLOR_BGR2HSV)
hsv_room = cv2.cvtColor(key, cv2.COLOR_BGR2HSV)
chroma_h = hsv_chroma[:, :, 0]
lower = np.array([chroma_h.min() - offset, 100, 100])
upper = np.array([chroma_h.max() + offset, 255, 255])
mask = cv2.inRange(hsv_room, lower, upper)
mask_inv = cv2.bitwise_not(mask)
roi = room[y:h, x:w]
fg = cv2.bitwise_and(key, key, mask=mask_inv)
bg = cv2.bitwise_and(roi, roi, mask=mask)
room[y:h, x:w] = fg + bg
cv2.imshow('chromakey', key)
cv2.imshow('add', room)
cv2.waitKey(0)
cv2.destroyAllWindows()
Reference
この問題について(open CV_6 Track, HSV), 我々は、より多くの情報をここで見つけました https://velog.io/@jumpx2/open-CV6-Track-HSVテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol