文档章节

SLAM初探(四)

Pulsar-V
 Pulsar-V
发布于 2017/07/24 21:06
字数 680
阅读 36
收藏 1
点赞 0
评论 0

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
粉丝 43
博文 74
码字总数 58982
作品 1
成都
后端工程师
那些珍贵的「视觉SLAM」课程资料总结(三)

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

yong_qi2015 ⋅ 05/11 ⋅ 0

不同的应用场景AGV导航方式分析

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

gunser ⋅ 05/17 ⋅ 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

在Docker平台的ROS容器中构建Turtlebot机器人SLAM巡航地图

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

chenming_hnu ⋅ 01/07 ⋅ 0

LSD SLAM和ORB SLAM的对比

现在开始找实习了,开始回顾研究生做的工作,把之前做的东西都总结一下,梳理梳理知识。 LSD SLAM的介绍: LSD SLAM是slam界大牛 Jakob Engel的著作,也是直接法的代表性工作。和LSD SLAM想对...

osgoodwu ⋅ 04/11 ⋅ 0

(转) 实时SLAM的未来及与深度学习的比较

页面 E-mail: cvrobot@163.com 沪ICP备15010509号您是第 512297 位访客 版权声明 本站内容受《著作权法》保护. 版权所有 © 2004-2015 视觉机器人. 保留所有权. 网站开发 Designed by 视觉机...

wangxiaocvpr ⋅ 2016/07/26 ⋅ 0

C#进阶系列——DDD领域驱动设计初探(四):WCF搭建

原文:C#进阶系列——DDD领域驱动设计初探(四):WCF搭建 前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储。领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再...

杰克.陈 ⋅ 2017/12/19 ⋅ 0

SLAM学习资料整理

1.必读经典 Thrun S, Burgard W, Fox D. 《Probabilistic robotics》[M]. Cambridge, USA: MIT Press, 2005 《Principles of Robot Motion Theory,Algorithms and Implementation》 2.有很多......

元禛慎独 ⋅ 2016/10/20 ⋅ 0

Elasticsearch技术分享(一)

场景 与同事分享一下最近学习es的心得 大纲 1)es使用场景 2)搭建环境与集群基本运维命令介绍 3)基础分布式架构初探与核心概念解读 4)实战 分析 一、es使用场景 1) 什么是 es A) 故事引入...

PENGYUCHENG32109 ⋅ 2017/03/20 ⋅ 0

漫谈 SLAM 技术(上)

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:解洪文 导语 随着最近几年机器人、无人机、无人驾驶、VR/AR的火爆,SLAM技术也为大家熟知,被认为是这些领域的关键技术之一...

腾讯云社区 ⋅ 2017/12/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CENTOS7防火墙命令记录

安装Firewall命令: yum install firewalld firewalld-config Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-po......

cavion ⋅ 37分钟前 ⋅ 0

【C++】【STL】利用chromo来测量程序运行时间与日志时间打印精确到微秒

直接上代码吧,没啥好说的。头疼。 #include <iostream>#include <string>#include <ctime>#include <sstream>#include <iomanip>#include <thread>#include <chrono>using ......

muqiusangyang ⋅ 41分钟前 ⋅ 0

Mac环境下svn的使用

在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简...

故久呵呵 ⋅ 50分钟前 ⋅ 0

破解公司回应苹果“USB限制模式”:已攻破

本周四,苹果发表声明称 iOS 中加入了一项名为“USB 限制模式”的功能,可以防止 iPhone 在连接其他设备的时候被破解,并且强调这一功能并不是针对 FBI 等执法部门,为的是保护用户数据安全。...

六库科技 ⋅ 52分钟前 ⋅ 0

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

概要 问题描述 我想用枚举类来表示用户当前状态,枚举类由 code 和 msg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候...

Wenyi_Feng ⋅ 今天 ⋅ 0

synchronized与Lock的区别

# <center>王梦龙的读书笔记第一篇</center> ## <center>-synchronized与Lock的区别</centre> ###一、从使用场景来说 + synchronized 是能够注释代码块、类、方法但是它的加锁是和解锁使用一......

我不想加班 ⋅ 今天 ⋅ 0

VConsole的使用

手机端控制台打印输出,方便bug的排查。 首先需要引入vconsole.min.js 文件,然后在文件中创造实例。就能直接使用了。 var vConsole = new VConsole(); vConsole的文件地址...

大美琴 ⋅ 今天 ⋅ 0

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 今天 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 今天 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部