728x90
OpenCV로 이미지의 원하는 위치의 좌표 추출하는 법을 알아보자
좌표를 추출하여 해당 위치의 이미지 색상을 바꾸는 등의 응용까지 해볼 수 있다.
해당 이미지를 가지고 현재 회색인 신체 윤곽선 부분을 초록색으로 바꿔보자
1. 윤곽선 이미지 불러오기
import cv2
person = cv2.imread('person.png')
- 검은색 배경에 회식 라인의 윤곽선 이미지다.
2. 이미지 회색 처리
gray = cv2.cvtColor(resized_person, cv2.COLOR_BGR2GRAY)
cv2.imshow('result', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 해당 이미지의 좌표를 추출하기 위해 이미지 이진화 작업이 꼭 필요한데 그 전에 회색 처리를 먼저 확실하게 해준다.
3. 이미지 이진화
ret, otsu = cv2.threshold(gray, -1, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('result', otsu)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 오츠 알고리즘을 통해 자동으로 이미지 이진화를 진행한다.
- 좌표 추출을 원하는 위치가 검정색(픽셀 값: 0)이 되어야 한다. cv2.bitwise_not(otsu) 를 실행하여 반전 이진화를 진행한다.
4. 해당 윤곽선 좌표 추출
import numpy as np
np.where(contour == 0)
- np.where() 는 Numpy 자료형 array 에 특정 조건을 만족하는 위치의 인덱스를 가져올 수가 있다.
- 이미지를 OpenCV로 불러오게 되면 Numpy 자료형으로 불러오게 된다.
5. 회색 이미지에서 컬러 이미지로 변환
contour_color = cv2.cvtColor(contour, cv2.COLOR_GRAY2BGR)
- 이미지를 가지고 회색 처리나 이진화를 하게 되면 색상 값이 하나만 존재하게 된다.
- 이미지는 Numpy 자료형이기 때문에 배열로 치자면 컬러는 R,G,B 3가지의 색상 값을 가지고 있기 때문에 3차원 배열이고, 무채색 이미지는 검은색 계열 한가지의 색상만 존재하기 때문에 2차원 배열이다.
- 따라서, 컬러 이미지로 변환을 해주면 2차원에서 3차원으로 변환된다.
- 이미지의 검색 부분을 초록색으로 변경해줄 것이기 때문에 이와 같이 컬러 이미지로 변환한다.
6. 이미지 내 검정색 부분 초록색으로 변환
contour_color[np.where(contour == 0)] = [0,255,0]
# 검은색=[0,0,0] 초록색=[0,255,0]
- np.where(contour==0) 를 통해 윤곽선 이미지의 검은색 부분을 찾는다.
- contour_color[np.where(contour == 0)] = [0,255,0] 컬러로 변환된 이미지에 찾은 좌표를 매칭시켜 초록색 RGB값을 삽입한다.
※ 결과
728x90
'Python > OpenCV' 카테고리의 다른 글
[OpenCV] 이미지 합성 (0) | 2024.02.08 |
---|---|
[OpenCV] 이미지 윤곽선 검출 (0) | 2024.02.07 |
[OpenCV] OpenCV 미니 창에 마우스 이벤트 처리하기 (0) | 2023.12.30 |
[OpenCV] OpenCV를 이용하여 동영상 출력 (2) | 2023.12.19 |