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

참고