Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

잡동사니 블로그

[Python] OpenCV로 Contour 및 Color 검출 하기 본문

Python

[Python] OpenCV로 Contour 및 Color 검출 하기

코딩부대찌개 2023. 9. 13. 23:53

예시 이미지

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순서