OpenNI和OpenCV:cv2.imshow()崩溃,并显示以下错误:(-215:声明失败)dst.data ==(uchar *)dst_ptr在函数'cvShowImage'中

问题描述 投票:4回答:1

我正在尝试从连接到Windows 10计算机的Orbbec Astra Pro摄像机接收深度图像。我已经安装了[r] forfor opencv-python 4.0.0.21primesense 2.2.0.30.post5,这似乎是最新的稳定python软件包。

这是我正在尝试的代码片段:

import numpy as np
import cv2
from primesense import openni2
from primesense import _openni2 as c_api

openni2.initialize("./OpenNI-Windows-x64-2.3/Redist")    

if openni2.is_initialized():
    print('openni2 ready')
else:
    print('openni2 not ready')

dev = openni2.Device.open_any()

depth_stream = dev.create_depth_stream()
depth_stream.set_video_mode(c_api.OniVideoMode(pixelFormat = c_api.OniPixelFormat.ONI_PIXEL_FORMAT_DEPTH_100_UM, resolutionX = 640, resolutionY = 480, fps = 30))
depth_stream.start()

while(True):
    frame = depth_stream.read_frame()
    frame_data = frame.get_buffer_as_uint16()
    img = np.frombuffer(frame_data, dtype=np.uint16)
    img.shape = (1, 480, 640)
    img = np.concatenate((img, img, img), axis=0)
    img = np.swapaxes(img, 0, 2)
    img = np.swapaxes(img, 0, 1)

    cv2.imshow("image", img)
    cv2.waitKey(34)

depth_stream.stop()
openni2.unload()

但是无论何时接到cv2.imshow(),我都会收到:

cv2.error:OpenCV(4.0.0)C:\ projects \ opencv-python \ opencv \ modules \ highgui \ src \ window_w32.cpp:1230:错误:(-215:声明失败)dst.data ==(uchar *)dst_ptr功能'cvShowImage'

我不知道如何将OpenNI帧转换为OpenCV mat数据结构,以及为什么cv2.imshow()拒绝显示图像。 OpenNI似乎已正确初始化,至少它会打印openni2 ready ...我在这里做错了什么?


编辑

这似乎是我在这里https://github.com/skvark/opencv-python/issues/167报告的错误


解决方案(种类)

将OpenCV版本降级到最新的3.x版本使其可以工作!

pip install --upgrade opencv-python==3.4.5.20

python opencv openni orbbec
1个回答
0
投票

您是否尝试过:

frame.get_buffer_as_uint32()
img = np.frombuffer(frame_data, dtype=np.uint32)

由于某种原因,在opencv4中,如果不使用特定的dtype,imshow将不起作用

© www.soinside.com 2019 - 2024. All rights reserved.