OpenCV 에서 Depth 정보를 담은 싱글채널 영상을 저장하는 방법
Code
- Opencv 에서 영상을 저장(wirte)할 때,
CV_8U
,CV_16U
포맷만 지원함 error: (-215:Assertion failed) image.depth() == CV_8U || image.depth() == CV_16U in function 'write'
- Depth 영상은 정밀도를 위해
CV_16U
로 변환하여 저장함
# FFV1 코덱 사용 (.mkv)
out = cv.VideoWriter(
filename="./output/output3.mkv",
apiPreference=cv.CAP_FFMPEG,
fourcc=cv.VideoWriter_fourcc(*"FFV1"),
fps=30.0,
frameSize=(1280, 1080),
params=[
cv.VIDEOWRITER_PROP_DEPTH,
cv.CV_16U,
cv.VIDEOWRITER_PROP_IS_COLOR,
0,
],)
# float32(0 ~ 1) to CV_16U 변환 함수
def convert16U(img):
img *= 65535
img[img < 0] = 0
img = img.astype(np.uint16)
return img
+ USB 웹캠에서 사용가능한 포맷 목록 보기
$ sudo apt install v4l-utils
# 카메라 번호 확인
$ ls /dev/video*
# 카메라 정보 확인
$ v4l2-ctl -d /dev/video0 --list-formats-ext