[OpenCV] 외곽선, 모서리 (엣지, edge) 추출 (Canny, 파이썬)


파이썬에서 OpenCV를 사용해서 그림 파일에서 외곽선 (모서리) 추출을 해보도록 하겠습니다. 엣지 (edge) 추출이라고도 합니다.


import cv2

import matplotlib.pyplot as plt


그림 = cv2.imread('그림파일.jpg')

그림RGB = cv2.cvtColor(그림, cv2.COLOR_BGR2RGB)

외곽선추출 = cv2.Canny(그림, 100, 200) # 100, 200은 변경 가능한 인자값입니다.


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, OpenCV 알고리즘과는 상관이 없습니다.

plt.subplot(1, 2, 1) # 1행 2열에서 1번째 열

plt.imshow(그림RGB)

plt.xticks([]) # x축 좌표 숨김

plt.yticks([]) # y축 좌표 숨김


plt.subplot(1, 2, 2) # 1행 2열에서 2번째 열

plt.imshow(외곽선추출, cmap='gray')

plt.xticks([]) # x축 좌표 숨김

plt.yticks([]) # y축 좌표 숨김


plt.show()


이렇게 하면 그림의 외곽선만 멋지게 추출되는 것을 보실 수 있습니다.



[OpenCV] 그림에서 RGB 채널을 각각 분리하기 (파이썬)


파이썬에서 OpenCV를 사용해서 그림의 RGB 채널을 각각 분리하려면 다음과 같이 하시면 됩니다. 제 예제 꽃 사진에는 빨간색과 초록색이 많고 파란색은 거의 없네요.


import cv2

import matplotlib.pyplot as plt


그림BGR = cv2.imread("그림파일.jpg")

그림RGB = cv2.cvtColor(그림BGR, cv2.COLOR_BGR2RGB)


# 빨간색만 뽑기

그림R = 그림RGB.copy() # 이렇게 해야 제대로 복사가 됩니다.

그림R[:,:,1] = 0 # 1: 초록색 없애기

그림R[:,:,2] = 0 # 2: 파란색 없애기


# 초록색만 뽑기

그림G = 그림RGB.copy() # 이렇게 해야 제대로 복사가 됩니다.

그림G[:,:,0] = 0 # 0: 빨간색 없애기

그림G[:,:,2] = 0 # 2: 파란색 없애기


# 파란색만 뽑기

그림B = 그림RGB.copy() # 이렇게 해야 제대로 복사가 됩니다.

그림B[:,:,0] = 0 # 0: 빨간색 없애기

그림B[:,:,1] = 0 # 1: 초록색 없애기


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, OpenCV 알고리즘과는 상관이 없습니다.

plt.subplot(1, 4, 1) # 1행 2열에서 1번째 열

plt.imshow(그림RGB)

plt.subplot(1, 4, 2) # 1행 2열에서 2번째 열

plt.imshow(그림R)

plt.subplot(1, 4, 3) # 1행 2열에서 2번째 열

plt.imshow(그림G)

plt.subplot(1, 4, 4) # 1행 2열에서 2번째 열

plt.imshow(그림B)

plt.show()



[OpenCV] 그림 좌우 및 상하 반전시키기 (flip, 파이썬)


파이썬에서 OpenCV를 사용해서 그림의 좌우나 상하를 바꾸려면, 즉 거울 상으로 만들려면 다음과 같이 하시면 됩니다.


import cv2

import matplotlib.pyplot as plt


그림BGR = cv2.imread("그림파일.jpg")

그림RGB = cv2.cvtColor(그림BGR, cv2.COLOR_BGR2RGB)

그림좌우반전 = cv2.flip(그림RGB, 1) # 1은 좌우 반전, 0은 상하 반전입니다.


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, OpenCV 알고리즘과는 상관이 없습니다.

plt.subplot(1, 2, 1) # 1행 2열에서 1번째 열

plt.imshow(그림RGB)


plt.subplot(1, 2, 2) # 1행 2열에서 2번째 열

plt.imshow(그림좌우반전)


plt.show()



+ Recent posts