实现Intel Realsense和SDL2的问题

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

作为标题,我在尝试从realsesense管道制作SDL2显示帧时遇到问题。我不知道如何从框架集中提取数据并对其进行处理,以使其与SDL2兼容。我在用C ++编程。我已经阅读了英特尔SDK网站上的所有文档,并尝试了许多不同的方法,但到目前为止没有任何效果。

这是我在一个新项目上写的一些代码:

int main(int argc, char * argv[])
{

    window window(1280, 720, "Tecnos Depth Cam Demo");

    rs2::colorizer color_map;

    rs2::pipeline pipe;
    pipe.start();

    while (true)
    {
        rs2::frameset data = pipe.wait_for_frames().apply_filter(color_map);

        // Process data to work with SDL2 renderer (my problem)

    }
}
c++ sdl-2 realsense
1个回答
0
投票

最后我设法做到了。只需使用SDL_CreateTexture创建纹理,并使用每帧Realsense库的get_data()函数中的像素数据对其进行更新。棘手的部分是您必须使用以下方法定义像素格式:

SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, BITS_PER_PIXEL, BYTES_PER_PIXEL)

下面是我在鱼尾上写的一些代码演示,向您展示:

#include <iostream>

#define SDL_MAIN_HANDLED
#include <SDL.h>

#include <librealsense2/rs.hpp>

#define WINDOW_WIDTH 1280
#define WINDOW_HEIGHT 720

#define BITS_PER_PIXEL 24
#define BYTES_PER_PIXEL 3

int main(int argc, char* argv[])
{

    // Init

    SDL_Init(SDL_INIT_EVERYTHING);

    // Declarative section

    SDL_Window* window = SDL_CreateWindow("Tutorial", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);

    SDL_Texture* textureCamera = SDL_CreateTexture(renderer, SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, BITS_PER_PIXEL, BYTES_PER_PIXEL), SDL_TEXTUREACCESS_TARGET, WINDOW_WIDTH, WINDOW_HEIGHT);

    rs2::pipeline camera;
    rs2::frameset frames;

    // Executive section

    camera.start();

    // Loop

    while (true)
    {
        // Do whatever you like there

        SDL_RenderClear(renderer);

        // ...

        frames = camera.wait_for_frames();

        Uint8* pixels = (Uint8*)(frames.get_color_frame().get_data());

        SDL_UpdateTexture(textureCamera, NULL, pixels, frames.get_color_frame().get_bytes_per_pixel() * WINDOW_WIDTH);

        SDL_RenderCopy(renderer, textureCamera, NULL, NULL);

        SDL_RenderPresent(renderer);

    }

    return EXIT_SUCCESS;

}

我希望我能帮助像我这样陷入困境的人。对于任何问题,只要问我,我将非常乐意为您提供帮助!最后,感谢stackoverflow社区始终为您提供帮助!

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