Python+OpenCV 이미지 처리―색상 공간 변환
코드 는 다음 과 같 습 니 다:
#
import cv2 as cv
def color_space_demo(img):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB GRAY GRAY
cv.imshow("gray", gray)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) #RGB HSV
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(img, cv.COLOR_RGB2YUV) #RGB YUV
cv.imshow("yuv",yuv)
Ycrcb = cv.cvtColor(img, cv.COLOR_RGB2YCrCb) #RGB YCrCb
cv.imshow("Ycrcb", Ycrcb)
src = cv.imread('D:\imageload\example.png')
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
실행 결과:1.RGB 는 빨간색,녹색,파란색 을 말 하 는데 한 개의 그림 은 이 세 개의 채널(채널)로 구성 된다.
2.Gray 는 그 레이스 케 일 값 만 있 는 channel 입 니 다.
3.HSV 는 Hue(색조),Saturation(포화 도),Value(밝기)세 채널 이다.
명심 하 세 요(순 전 히 개인 적 인 이해 입 니 다):
1.바 이 두 피 디 아 는 기 존의 RGB(R,G,B)중의 R,G,B 를 하나의 전환 관계 에 따라 그레이 로 통일 하여 새로운 색상 RGB(Gray,Gray,Gray)를 형성 하고 이 를 통 해 기 존의 RGB(R,G,B)를 교체 하 는 것 이 그 레이스 케 일이 라 고 말 했다.
2.opencv 에서,COLORRGB2GRAY 는 3 채널 RGB 대상 을 1 채널 로 전환 하 는 그 레이스 케 일 대상 이다.
3.단일 채널 그 레이스 케 일 대상 을 RGB 로 변환 할 때 생 성 되 는 RGB 대상 의 각 채널 의 값 은 그 레이스 케 일 대상 의 그 레이스 케 일 값 입 니 다.
RGB 는 기계 가 이미 지 를 더욱 잘 표시 하도록 하기 위해 인류 에 게 직관 적 이지 않 고 HSV 는 우리 의 인지 에 더욱 가 깝 기 때문에 보통 우 리 는 특정한 색 을 추출 할 때 HSV 색 공간 으로 전환 하여 처리한다.
주석 추가:
1.HSV 아래 그림:
2.opencv 에서 HSV 색상 공간 범 위 는 다음 과 같 습 니 다. H:0-180 S: 0-255 V: 0-255
3.흔히 볼 수 있 는 색채 공간 은 RGB,HSV,HIS,YCrCb,YUV 가 있 는데 그 중에서 가장 많이 사용 하 는 것 은 RGB,HSV,YUV 이다.그 중에서 YUV 는 바로 YCrCb(바 이 두 백과 참조)이다.그 중에서 YUV 의'Y'는 밝기(Luminance 또는 Luma),즉 그 레이스 케 일 값 을 나타 낸다.반면'U'와'V'는 색도(Chrominance 또는 Chroma)를 나타 내 며 영상 색채 와 포화 도 를 묘사 하여 픽 셀 의 색 을 지정 하 는 역할 을 한다.
2.inrange 함 수 를 이용 하여 영상 속 의 색 을 걸 러 내 고 특정한 색 에 대한 추적 을 실현 합 니 다.
코드 는 다음 과 같 습 니 다:
#
import cv2 as cv
import numpy as np
def extrace_object_demo():
capture=cv.VideoCapture("E:/imageload/video_example.mp4")
while True:
ret, frame = capture.read()
if ret == False:
break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) # RGB HSV
lower_hsv = np.array([100, 43, 46]) #
upper_hsv = np.array([124, 255, 255]) #
mask = cv.inRange(hsv, lower_hsv, upper_hsv) # (H)、 (S)、 (V) ,
cv.imshow("video",frame)
cv.imshow("mask", mask)
c = cv.waitKey(40)
if c == 27: # Esc ASCII 27
break
extrace_object_demo()
cv.destroyAllWindows()
실행 결과:여 기 는 파란색 부분 만 추적 하 는 캡 처 입 니 다.참고 하 시기 바 랍 니 다.
주의:
1.Opencv 의 inRange 함수:이치 화 기능 실현 가능
함수 원형:inRange(src,lowerb,upperb[,dst])->dst
함수 의 매개 변수 의미:첫 번 째 매개 변 수 는 원수 그룹 으로 단일 채널,다 중 채널 이 될 수 있 습 니 다.두 번 째 매개 변 수 는 하계 이 고 세 번 째 매개 변 수 는 상계 이다.
마스크 = cv2.inRange(hsv, lower_blue, upper_blue)
첫 번 째 매개 변수:hsv 는 원본 그림(원본 이미지 행렬)을 말 합 니 다.
두 번 째 매개 변수:lowerblue 는 그림 에서 이 lower 보다 낮은 것 을 말 합 니 다.blue 값,그림 값 255
세 번 째 인자:upperblue 는 그림 에서 이 upper 보다 높 은 것 을 말 합 니 다.blue 의 값,그림 값 이 255(255 즉 검은색)로 변 합 니 다.
lowerblue~upper_blue 사이 의 값 이 0 으로 변 합 니 다(0 은 흰색 을 의미 합 니 다)
즉,Opencv 의 inRange 함 수 는 특정한 색 을 추출 하여 특정한 색 을 흰색 으로 바 꾸 고 다른 색 을 검은색 으로 바 꾸 어 이치 화 기능 을 실현 합 니 다.
2.HSV 색상 에 대응 하 는 RGB 분량 범위 표 는 다음 과 같 습 니 다.(여 기 는 3 채널 입 니 다)
3.채널 의 분리,합병 및 특정한 채널 값 의 수정
코드 는 다음 과 같 습 니 다:
#
import cv2 as cv
src=cv.imread('E:\imageload\example.png')
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
#
b, g, r =cv.split(src)
cv.imshow("second_blue", b)
cv.imshow("second_green", g)
cv.imshow("second_red", r)
# cv.imshow("second_red", r) r = cv2.split(src)[2]
#
src = cv.merge([b, g, r])
cv.imshow('changed_image', src)
#
src[:, :, 2] = 0
cv.imshow('modify_image', src)
cv.waitKey(0)
cv.destroyAllWindows()
주의:1.opencv 의 split 함수 와 merge 함 수 를 사용 하여 채널 의 분리 와 합병 을 실현 합 니 다.
2.cv.split 함수 에서 분 리 된 b,g,r 는 단일 채널 이미지 입 니 다.
이상 은 Python+OpenCV 이미지 처리-색채 공간 전환 에 대한 상세 한 내용 입 니 다.Python+OpenCV 이미지 처리 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.