文档章节

SLAM初探(四)

Pulsar-V
 Pulsar-V
发布于 2017/07/24 21:06
字数 680
阅读 43
收藏 1

OpenCV基础

这里我就不做过多的描述性问题,现在OpenCV在许多有关计算机视觉方面得到许多的应用。

OpenCV获取视频的方法及其图像转化问题

  1. 获取视频及图像的方式呢有多种多样的方式
  2. 我们知道OpenCV它本身是基于开源GUI框架GTK编写,但是在实际的使用GTK GUI的操作过程中会遇到我们不使用原有GUI窗口,需要在一个有更多操作按钮的窗口中去操作,在我搜集了众多的资料无果后的一个尝试性动作,让我得出了结果。
Mat image= video->getVideo();//此操作直接获取摄像头的图像矩阵
IplImage img = IplImage(image);
GdkPixbuf  pixbuf=img.data;
GtkWidget *gtk_image_new_from_pixbuf(GdkPixbuf *pixbuf );

是的,从上面的代码中呢可以看出,OpenCV存在缓存中的data数据,在Ipimage结构体状态保存的时候呢,是可以和GdkPixbuf通过为char类型的data图像数据互相转化的。这点GTK上与QT5基本苟同。

初步要搞清楚的事情,就是我们需要从Intel RealSence获取视频流数据其数据包括几种类型

  1. 图像RGB数据
  2. 深度数据
    在整个计算过程中,需要把图像数据和深度数据赋值给OpenCV的Mat,操作如下:
#include <pxcsensemanager.h>
#include <pxcsession.h>
#include "util_render.h"
#include <iostream>
#include <string>
#include <stdio.h>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
    //初始化图像流
    UtilRender *renderColor = new UtilRender(L"COLOR_STREAM");
    //初始化深度数据流
    UtilRender *renderDepth = new UtilRender(L"DEPTH_STREAM");
    //打开摄像头
    PXCSenseManager *psm = PXCSenseManager::CreateInstance();
    //如果摄像头打开失败,则报错
    if (!psm)
    {
        wprintf_s(L"Unabel to create the PXCSenseManager\n");
        return 1;
    }

    //初始化接收图像数据流和深度数据流
    psm->EnableStream(PXCCapture::STREAM_TYPE_COLOR);
    psm->EnableStream(PXCCapture::STREAM_TYPE_DEPTH);
    //确认初始化成功
    if (psm->Init() != PXC_STATUS_NO_ERROR)
    {
        wprintf_s(L"Unable to Init the PXCSenseManager\n");
        return 2;
    }
    //初始化接收的数据
    PXCImage *colorIm, *depthIm;
    PXCImage::ImageData depth_data;
    PXCImage::ImageData color_data;
    PXCImage::ImageInfo depth_information;
    PXCImage::ImageInfo color_information;

    Mat img = Mat(480, 640, CV_8UC1);

    while (waitKey(1))
    {
        if (psm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) break;

        PXCCapture::Sample *sample = psm->QuerySample();

        colorIm = sample->color;
        depthIm = sample->depth;

        colorIm->AcquireAccess(PXCImage::ACCESS_READ,PXCImage :: PIXEL_FORMAT_RGB24, &color_data);
        depthIm->AcquireAccess(PXCImage::ACCESS_READ, &depth_data);
        depth_information = sample->depth->QueryInfo();
        color_information = sample->color->QueryInfo();

        ushort *dpixels = (ushort*)depth_data.planes[0];
        for (int y = 0; y < depth_information.height; y++)
            for (int x = 0; x < depth_information.width; x++)
            {
                uchar d = dpixels[y * depth_information.width + x];
                img.at<uchar>(y, x) = min((int)((double)d / 600 * 255), 255);
            }
        Mat color_img = Mat(color_information.height, color_information.width, CV_8UC3);
        uchar * dp = (uchar*)color_data.planes[0];
        int cnt = 0;
        for (int y = 0; y < color_information.height; y++)
            for (int x = 0; x < color_information.width; x++)
            {
                color_img.at<Vec3b>(y, x)[0] = dp[cnt++];
                color_img.at<Vec3b>(y, x)[1] = dp[cnt++];
                color_img.at<Vec3b>(y, x)[2] = dp[cnt++];
            }
        namedWindow("a", 0);
        imshow("a", color_img);

        //imwrite("100.jpg", img);
        //depthIm->ReleaseAccess(&depth_data);
        //colorIm->ReleaseAccess(&color_data);

        //if (!renderColor->RenderFrame(sample->color)) break;
        //if (!renderDepth->RenderFrame(sample->depth)) break;

        psm->ReleaseFrame();
        cv::imshow("ok", img);
        /*Mat cur;
        medianBlur(img, cur, 5);
        cv::imshow("ok1", cur);*/
    }
    psm->Release();
}

© 著作权归作者所有

Pulsar-V

Pulsar-V

粉丝 61
博文 150
码字总数 135866
作品 1
成都
后端工程师
私信 提问
那些珍贵的「视觉SLAM」课程资料总结(三)

               ✦前言   SLAM,全称叫做Simultaneous Localization and Mapping,中文叫做同时定位与建图。   此篇文章,承接上一篇:那些珍贵的「视觉SLAM」课程资料总...

yong_qi2015
2018/05/11
0
0
不同的应用场景AGV导航方式分析

AGV根据不同的应用场景已衍生出了多种导航方式,每种导航方式也许都存在相应的优劣势,但均能找到自己的“用武之地”。所谓AGV导航方式是指决定其运行方向和路径的方式,它不同于前面所说的一...

gunser
2018/05/17
0
0
ROS 下 orbslam2 RGB-D (四)

一 . 利用数据集测试 # 6. RGB-D Example ## TUM Dataset 1. Download a sequence from http://vision.in.tum.de/data/datasets/rgbd-dataset/download and uncompress it. 2. Associate RG......

v7xyy
2017/10/08
0
0
解放双手——相机与IMU外参的在线标定

一、相机与IMU的融合 在SLAM的众多传感器解决方案中,相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图。这是因为这两个传感器之间具有互补性:相机在快速运动、光照改变...

计算机视觉life
07/09
0
0
在Docker平台的ROS容器中构建Turtlebot机器人SLAM巡航地图

在Docker平台的ROS容器中构建Turtlebot机器人SLAM巡航地图 SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建...

chenming_hnu
2018/01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
12
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部