잡동사니 블로그
[Python] OpenCV로 Contour 및 Color 검출 하기 본문
import cv2
import numpy as np
import matplotlib.pyplot as plt
#이미지 불러오기
img = cv2.imread("test.png")
#이미지 사이즈 조절
img=cv2.resize(img, dsize=(1000,500))
#이미지의 이진화를 위한 흑백으로 변경
new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#캐니 에지 검출을 통한 에지 검출
edges = cv2.Canny(new_img, 50, 130)
#이미지에서 외곽선(Contours)을 찾음.
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
#캐니 시각화
plt.imshow(thr, cmap='bone')
plt.title('Canny')
plt.axis('off')
plt.show()
for contour in contours:
# 각 윤곽선의 경계 사각형(bounding box)을 계산
x, y, w, h = cv2.boundingRect(contour)
# 사각형의 중심점을 계산
cx = int(x + w / 2)
cy = int(y + h / 2)
text=''
# 중심점 주변에 글 넣기
# RGB픽셀에서 가장 큰 값에 green red blue 부여
if np.argmax(img[cy][cx-30])== 1 :
text='green'
elif np.argmax(img[cy][cx-30])== 2 :
text='red'
else :
text='blue'
cv2.putText(img, text, (cx - 30, cy), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 원본 이미지와 글이 삽입된 이미지를 표시합니다
cv2.imshow("Original Image", img)
# 키보드 입력 대기 및 창 닫기
cv2.waitKey(0)
cv2.destroyAllWindows()
캐니 외에도 에지검출 알고리즘은 다양하게 있음.
가로와 세로방향에 따라 더 살리고 싶은 방향에 맞춰 다양한 알고리즘 적용가능.
알게된 것
OpenCV에서 이미지를 불러올 때는 BGR순서 이지만 matplotlib은 RGB순서
'Python' 카테고리의 다른 글
[Python] TabTransformer to use Tensorflow (0) | 2023.11.19 |
---|---|
[Python] Folium을 이용한 지도 시각화 (1) | 2023.10.24 |
[Python] pytorch와 sklearn의 train_test_split 활용하여 데이터 셋 나누기와 간단한 CNN (0) | 2023.09.07 |
[Python] Selenium과 bs4를 이용한 크롤링 + Pyautogui (0) | 2023.08.28 |
[Python] 시각화에 주로 쓰이는 라이브러리 3가지 (0) | 2023.08.26 |