Python+OpenCV 이미지 처리―색상 공간 변환

1.색채 공간의 전환
코드 는 다음 과 같 습 니 다:

#      
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 이미지 처리 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기