OpenCV Python : 깊이 이미지 depthmap을 화면에 출력하기OpenCV/OpenCV 강좌2023. 10. 15. 07:08
Table of Contents
반응형
OpenCV Python을 사용하여 깊이 이미지 depthmap을 화면에 보여주는 예제코드입니다.
2023. 8. 6 최초작성
코드에서는 다음 링크에 있는 depthmap 파일을 다운로드하여 사용했습니다.
https://github.com/unclearness/pyrgbd/blob/master/data/cmu_panoptic/171026_cello3/depth_00000.png
실행해보면 다음처럼 보입니다.
깊이 이미지에 대응하는 컬러 이미지는 다음과 같습니다.
출처 – https://github.com/unclearness/pyrgbd/blob/master/data/cmu_panoptic/171026_cello3/color_00000.png
테스트에 사용한 코드입니다.
import cv2 import matplotlib.pyplot as plt import matplotlib import numpy as np def get_color_depthmap(depthmap, max_range): # 256 단계의 color map을 생성합니다. 하나의 RBGR 색을 의미하는 3개의 값이 256개 만들어 집니다. # 256 개의 색을 결정하는 것은 get_camp의 인자인 "jet"이 결정합니다. # cmap의 shape는 (256,3)입니다. # cmap = plt.cm.get_cmap("jet", 256) cmap = matplotlib.colormaps["jet"] cmap = np.array([cmap(i) for i in range(256)])[:, :3] * 255 # sparse depthmap인 경우 depth가 있는 곳만 추출합니다. 0이상의 값이 존재하는 곳만 찾습니다. depth_pixel_v_s, depth_pixel_u_s = np.where(depthmap > 0) #depthmap의 높이와 너비입니다. H, W = depthmap.shape # 컬러로 바꾼 depthmap이 저장될 넘파이 배열입니다. color_depthmap = np.zeros((H, W, 3)).astype(np.uint8) # depthmap의 값을 0~255사이의 값으로 바꾼 후, cmap에 정의된 RGB색으로 바꾸어줍니다. for depth_pixel_v, depth_pixel_u in zip(depth_pixel_v_s, depth_pixel_u_s): depth = depthmap[depth_pixel_v, depth_pixel_u] # 0 ~ 255 사이의 값으로 변환합니다. color_index = int(255 * min(depth, max_range) / max_range) # RGB 값으로 변환합니다. color = cmap[color_index, :] # 앞에서 얻은 color색으로 depthmap의 좌표에 해당 위치에 점을 찍어줍니다. cv2.circle(color_depthmap, (depth_pixel_u, depth_pixel_v), 1, color=tuple(color), thickness=-1) return color_depthmap # 실제 depthmap이 저장된 방식에 맞게 depth 복원하여 사용하면 됩니다. # depthmap = depthmap.astype(np.float32) / 255.0 # depthmap = depthmap.astype(np.float32) * max_range / 65535 depthmap_path = 'depth_00000.png' depthmap = cv2.imread(depthmap_path, cv2.IMREAD_UNCHANGED) # depthmap의 데이터타입은 uint16입니다. max_range = depthmap.max() # 샘플로 사용한 depthmap 파일의 경우 최대값은 7989입니다 # 픽셀의 최대값이 max_range인 depthmap으로부터 컬러 이미지 color_depthmap을 얻습니다. color_depthmap = get_color_depthmap(depthmap, max_range) # OpenCV를 사용하여 화면에 출력시에는 색공간을 BGR로 변경해줘야 합니다. color_depthmap = cv2.cvtColor(color_depthmap, cv2.COLOR_RGB2BGR) cv2.imshow('result', color_depthmap) cv2.waitKey(0) # matplotlib를 사용하여 화면에 출력시에는 색공간 변환없이 그냥 하면 됩니다. # plt.imshow(color_depthmap) # plt.show() |
원본 코드
https://gaussian37.github.io/vision-depth-depthmap_visualization/
반응형
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV에서 VideoCapture사용시 read 함수는 계속 실행해야 함 (0) | 2023.10.17 |
---|---|
이미지 파일로 구글 이미지 검색하는 파이썬 코드(requests, webbrowser 사용) (0) | 2023.10.16 |
OpenCV 빌드 정보 확인하기 (0) | 2023.10.14 |
CLAHE OpenCV Python 예제 코드 (0) | 2023.10.13 |
유사한 사진 찾아주는 Python 코드 (0) | 2023.10.13 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!