【问题标题】:Problems implementing Intel Realsense and SDL2实施英特尔实感和 SDL2 的问题
【发布时间】:2020-06-04 16:51:07
【问题描述】:

作为标题,我在尝试通过 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】:

    最后我设法做到了。只需使用 SDL_CreateTexture 创建一个纹理,并使用来自 Realsense 库的 get_data() 函数的像素数据每帧更新它。棘手的部分是你必须定义一个像素格式:

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

    这是我在 porpuse 上写的一个小代码演示给你看:

    #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 社区,即使没有提供帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多