분명 numpy를 설치했는데 파이썬에서 numpy를 사용하려 하면 다음과 같이 AttributeError: module 'numpy' has no attribute ... 하는 에러가 뜰 때가 있습니다.

import numpy as np

print(np.__version__)
# AttributeError: module 'numpy' has no attribute '__version__'

 

이는 numpy가 설치는 되었지만 시스템에서 파이썬 라이브러리로 제대로 연결이 안 되어서 그렇습니다. 이럴 경우 맥에서 homebrew를 사용할 때를 기준으로

brew link --overwrite numpy

 

를 실행해주면 문제가 해결됩니다.

 

참조한 곳: https://github.com/Homebrew/homebrew-core/issues/15698#issuecomment-315730732

파이썬에서 상속을 통해 클래스를 만들 경우 생성자 안에서 상위 클래스의 생성자를 호출해야 할 때가 있습니다. 그럴 때 아래 두 종류의 코드가 사용되곤 하는데요, 간단한 코드는 파이썬 3에서부터 지원되는 문법이고 복잡한 코드는 파이썬 2와 3에서 모두 지원됩니다. 기능은 동일합니다.

 

1. 간단한 코드

# 파이썬 3에서부터 지원됩니다.
super().__init__()

 

2. 복잡한 코드

# 파이썬 2와 3에서 모두 지원됩니다.
super(__class__, self).__init__()

 

참조: https://stackoverflow.com/a/61288819/1125721

[VI, VIM] 정규식에서 non-greedy 하게 검색하기 (욕심부리지 않기)


VI의 정규식이 펄이나 파이썬 등의 정규식과 크게 다른 점 중 하나는 non-greedy (욕심부리지 않기) 연산자입니다. 대부분의 경우 물음표 기호가 사용되는데 VI에서는 \{-}가 사용됩니다. 예를 들면 다음과 같습니다.


:%s/hello.\{-}://g


라고 하면 hello에서 가장 가까이 있는 : 까지만 사라지게 됩니다. 펄이나 파이썬이었으면 .? 이런 식으로 사용했을 거라, 지레짐작으로 VI에서 열심히 \? 를 시도해보다가 시행착오를 엄청 했습니다.

[파이썬] 아나콘다 업데이트하기


아나콘다를 사용하다 보면 아나콘다 자체 및 부속 라이브러리들을 업데이트 해야 할 일이 생기곤 합니다. 그럴 때에는 다음과 같이 하면 쉽게 전체 업데이트를 할 수 있습니다.


conda update -n root conda

conda update --all

conda update --all


conda update -n root conda 는 conda 자체를 최신 버전으로 업데이트하는 명령입니다.

conda update --all 이 본격적으로 업데이트를 하는 명령인데, 경우에 따라 두 번 실행해야 다 업데이트가 되는 경우가 있었습니다.


( 다음 링크를 참고했습니다. https://stackoverflow.com/questions/45197777/how-do-i-update-anaconda#45197778 )

[OpenCV] 꼭짓점 (코너, corner) 추출 (cornerHarris, 파이썬)


파이썬에서 OpenCV를 사용해서 그림 파일에서 꼭짓점을 추출해보도록 하겠습니다. 코너 (corner) 추출이라고도 합니다.


import cv2

import numpy as np

import matplotlib.pyplot as plt


그림 = cv2.imread('체스판.jpg') # 결과를 보기 쉽도록 체스판 그림을 사용했습니다.

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

그림흑백 = cv2.cvtColor(그림, cv2.COLOR_BGR2GRAY) # 꼭짓점 추출에는 흑백 그림이 필요합니다.

그림꼭짓점 = cv2.cvtColor(그림, cv2.COLOR_BGR2RGB) # 나중에 꼭짓점을 여기에 표시합니다.


그림흑백 = np.float32(그림흑백) # 넘파이(numpy)를 사용해서 자료형을 부동소수점으로 바꾸어주어야 합니다.

결과 = cv2.cornerHarris(그림흑백, 2, 3, 0.04) # 2, 3, 0.04는 바꿀 수 있는 인자들입니다.

결과 = cv2.dilate(결과, None, iterations=6) # 꼭짓점을 표시하기 위해 확장 (dilate) 연산을 합니다.

그림꼭짓점[결과>0.01*결과.max()]=[255, 0, 0] # 꼭짓점이 빨간색 점으로 그림에 표시됩니다.


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, 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(그림꼭짓점)

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

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


plt.show()


이렇게 하면 그림의 꼭짓점이 멋지게 추출되는 것을 보실 수 있습니다.



[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()



[OpenCV] 그림을 일정 각도만큼 회전시키기 (getRotationMatrix2D, warpAffine, 파이썬)


파이썬에서 OpenCV를 사용해서 그림을 원하는 각도만큼 회전시키려면 다음과 같이 하시면 됩니다.


import cv2

import matplotlib.pyplot as plt


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

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

세로, 가로, 채널 = 그림RGB.shape


대각선 = int(((가로*가로 + 세로*세로)**0.5)) # 정수여야 합니다.

회전중심 = int(가로/2), int(세로/2) # 역시 정수여야 합니다.

회전각도 = 135 # 마음대로 정하세요    

새세로, 새가로 = 세로, 가로


그림회전 = cv2.getRotationMatrix2D(회전중심, 회전각도, 1) # 1은 확대/축소값입니다.

회전결과 = cv2.warpAffine(그림RGB, 그림회전, (새세로, 새가로))


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

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

plt.imshow(그림RGB)


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

plt.imshow(회전결과)


plt.show()



[OpenCV] 그림의 가로, 세로 길이를 비율대로 바꾸기 (resize, 파이썬)


그림 작업을 하다 보면 그림의 가로와 세로 길이를 비율에 맞추어서 바꾸어야 할 일도 생깁니다. 파이썬에서 OpenCV를 사용해서 다음과 같이 하시면 됩니다.


import cv2

import matplotlib.pyplot as plt

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

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

새가로비율, 새세로비율 = 0.3, 1.7 # 좋아하는 숫자를 넣으세요

그림새크기 = cv2.resize(그림RGB, (0, 0), fx=새가로비율, fy=새세로비율)


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

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

plt.imshow(그림RGB)


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

plt.imshow(그림새크기)


plt.show()


참고하실만한 OpenCV 공식 설명서 링크입니다.

http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#resize



+ Recent posts