我想在程序中更改VideoStream设置,但是不起作用

#include <OpenNI.h>

int main()
{
    OpenNI::initialize();
    Device device;
    device.open(ANY_DEVICE);
    VideoStream depthStream;
    depthStream.create(device, SENSOR_DEPTH);
    depthStream.start();

    VideoMode depthMode;
    depthMode.setFps(20);
    depthMode.setResolution(640, 480);
    depthMode.setPixelFormat(PIXEL_FORMAT_DEPTH_100_UM);
    depthStream.setVideoMode(depthMode);

    ...
}


即使我在depthStream.start()函数之后更改了setVideoMode()行,但仍然无法正常工作。

我将Fps更改为24、20、5、1,但没有任何改变。

ps。 :这是我的简单代码,没有错误处理。



编辑:

回答:
在亲爱的“ api55”的帮助下,我发现我的设备(Kinect Xbox)仅支持videoMode的一种模式。所以我不能改变

我唯一支持的视频是:

FPS:30
Width:640
Height:480

最佳答案

我在code之前成功更改了VideoMode。创建VideoStream之后,您应该执行以下操作:

rc = depth.create(device, openni::SENSOR_DEPTH);
if (rc != openni::STATUS_OK)
    error_manager(3);

// set the new resolution and fps
openni::VideoMode depth_videoMode  = depth.getVideoMode();
depth_videoMode.setResolution(frame_width,frame_height);
depth_videoMode.setFps(30);
depth.setVideoMode(depth_videoMode);

rc = depth.start();
if (rc != openni::STATUS_OK)
    error_manager(4);


首先,我获得了流内部的VideoMode以保留其他值,并仅更改我想要的内容。我认为您的代码应该可以使用,但并非所有设置都可以在所有相机上使用。要检查可能的设置,可以使用功能openni::VideoStream::getSensorInfo。检查此代码应类似于:

#include <OpenNI.h>

int main()
{
    OpenNI::initialize();
    Device device;
    device.open(ANY_DEVICE);
    VideoStream depthStream;
    depthStream.create(device, SENSOR_DEPTH);
    depthStream.start();

    SensorInfo& info = depthStream.getSensorInfo();
    Array& videoModes = info.getSupportedVideoModes();
    for (int i = 0; i < videoModes.getSize(); i++){
         std::cout << "VideoMode " << i << std::endl;
         std::cout << "FPS:" << videoModes[i].getFps() << std::endl;
         std::cout << "Width:" << videoModes[i].getResolutionX() << std::endl;
         std::cout << "Height:" << videoModes[i].getResolutionY() << std::endl;
    }

    ...
}


我没有测试这最后一段代码,因此可能会有错误,但是您明白了。每个相机支持的设置都会改变,但是我认为相机支持的FPS是15和30。

我希望这可以帮助你

09-08 10:02