SGBM이나 BM이나 간단하게 쓰려면 인자가 크게 변하지 않는 느낌이긴 한데.. 돌려봐야 알 듯.
max_disparity = 128 stereoProcessor = cv2.StereoSGBM_create(0, max_disparity, 21) |
depth map을 아래와 같이 변환하면 되나?
if (apply_colourmap): disparity_colour_mapped = cv2.applyColorMap((disparity_scaled * (256. / max_disparity)).astype(np.uint8), cv2.COLORMAP_HOT) cv2.imshow(window_nameD, disparity_colour_mapped) else: cv2.imshow(window_nameD, (disparity_scaled * (256. / max_disparity)).astype(np.uint8)) |
[링크 : https://github.com/tobybreckon/python-examples-cv/blob/master/stereo_sgbm.py]
+
2024.02.28
어찌어찌 변환은 완료. cv.threshold 라는 함수를 이용해서 맵을 만들고 막 변환하긴 하는데
솔찍히 멀 어떻게 변환한건진 좀더 봐야 할 듯. 근데 이거 말고도 matplotlib 에서 animation 기능으로 갱신이 가능하다고 하니
그걸 이용해봐도 될 듯.
$ cat depth.py import numpy as np import cv2 as cv from matplotlib import pyplot as plt imgL = cv.imread('tsukuba_l.png', cv.IMREAD_GRAYSCALE) imgR = cv.imread('tsukuba_r.png', cv.IMREAD_GRAYSCALE) max_disparity=16 stereo = cv.StereoBM_create(max_disparity, blockSize=15) disparity = stereo.compute(imgL,imgR) #plt.imshow(disparity,'gray') #plt.show() #cv.imshow("depth map", (disparity * (256/16)).astype(np.uint8)) _, disparity = cv.threshold(disparity, 0, max_disparity * 16, cv.THRESH_TOZERO) disparity_scaled = (disparity / 16.).astype(np.uint8) disparity_colour_mapped = cv.applyColorMap((disparity_scaled * (256. / max_disparity)).astype(np.uint8),cv.COLORMAP_HOT) cv.imshow("depth map", disparity_colour_mapped) cv.waitKey() |
'Programming > openCV' 카테고리의 다른 글
openCV + python + matplotlib (0) | 2024.05.23 |
---|---|
openCV stereo SGBM WLS 필터 (0) | 2024.02.26 |
opencv stereo 계산 알고리즘 (0) | 2024.02.24 |
opencv 스테레오 카메라 깊이 처리하기 (0) | 2024.02.21 |
opencv 스테레오 사진 깊이 분석 전처리 - 렌즈 왜곡 보정 (0) | 2024.02.20 |