openCV를 파이썬에서 사용할때
highGUI를 쓰면 편하긴 한데..
cv2.imshow()를 쓰려고 하면, cv2.waitKey()를 써서 멈춰줘야만 해서 인터프리터에서 쓰기가 힘들다
matplotlib을 plt.ion() 으로 인터랙티브 모드 켜게 되면
matplotlib의 plot이 독립 쓰레드로 작동해서 opencv의 highGUI 처럼 멈추지 않고 작동한다.
plt.imshow()는 단순하게 이미지 포인터를 바꾸어 주고
plt.pause()를 통해 데이터를 실제 GUI에 갱신할 시간을 벌어주고
plt.show()를 통해 이미지를 업데이트 한다.
import matplotlib.pyplot as plt import cv2 cap = cv2.VideoCapture(0) plt.ion() while (True): ret, frame = cap.read() if cv2.waitKey(1) & 0xFF == ord('q'): break plt.subplot(1,2,1), plt.imshow(frame, interpolation='nearest') plt.pause(0.001) plt.show() |
[링크 : https://stackoverflow.com/questions/47172219/how-can-i-use-matplotlib-in-real-time]
openCV가 v4l로 이미지를 획득할때는 BGR로 받고, matplotlib은 RGB로 표현하니, 위의 예제를 실행하면 사람이 스머프가 된다.
img_cv2 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) |
[링크 : https://tempdev.tistory.com/32]
전체 코드를 보면 아래와 같이 되는데.. cv2.imshow() 보다 많이 느린 느낌.. 딱 테스트용으로만 쓸 수 있을 듯
import cv2 import matplotlib.pyplot as plt cap = cv2.VideoCapture(0) plt.ion() while (True): ret, img = cap.read() data = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(data) plt.pause(0.001) plt.show() |
'Programming > openCV' 카테고리의 다른 글
openCV stereo SGBM WLS 필터 (0) | 2024.02.26 |
---|---|
openCV stereo SBGM 예제, depth map을 imshow로 보기 (0) | 2024.02.26 |
opencv stereo 계산 알고리즘 (0) | 2024.02.24 |
opencv 스테레오 카메라 깊이 처리하기 (0) | 2024.02.21 |
opencv 스테레오 사진 깊이 분석 전처리 - 렌즈 왜곡 보정 (0) | 2024.02.20 |