技术标签: 图像处理
#include <iostream>
#include <string>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
using namespace std;
using namespace cv;
// 定义点云类型
typedef pcl::PointXYZRGBA PointT;
typedef pcl::PointCloud<PointT> PointCloud;
// 相机内参
const double camera_factor = 1000;
const double camera_cx = 325.5;
const double camera_cy = 253.5;
const double camera_fx = 518.0;
const double camera_fy = 519.0;
int user_data;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor(0, 0, 0);
}
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = 0;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape("text", 0);
viewer.addText(ss.str(), 200, 300, "text", 0);
//FIXME: possible race condition here:
user_data++;
}
// 主函数,读取rgb.png和depth.png,并转化为点云
int main(int argc, char** argv)
{
Mat rgb, depth;
// rgb 图像是8UC3的彩色图像
rgb = imread("colorseed.png");
// depth 是16UC1的单通道图像,注意flags设置-1,表示读取原始数据不做任何修改
depth = imread("depthseed.png", -1);
// 点云变量
// 使用智能指针,创建一个空点云。这种指针用完会自动释放。
PointCloud::Ptr cloud(new PointCloud);
// 遍历映射图
for (int m = 0; m < depth.rows; m++)
for (int n = 0; n < depth.cols; n++)
{
// 获取映射图中(m,n)处的值
ushort d = depth.ptr<ushort>(m)[n];
// d 可能没有值,若如此,跳过此点
if (d == 0)
continue;
// d 存在值,则向点云增加一个点
PointT p;
// 计算这个点的空间坐标,因为点云上下颠倒,把y加一个负号
p.z = double(d) / camera_factor;
p.x = (n - camera_cx) * p.z / camera_fx;
p.y = -(m - camera_cy) * p.z / camera_fy;
// 从rgb图像中获取它的颜色
// rgb是三通道的BGR格式图,所以按下面的顺序获取颜色
p.b = rgb.ptr<uchar>(m)[n * 3];
p.g = rgb.ptr<uchar>(m)[n * 3 + 1];
p.r = rgb.ptr<uchar>(m)[n * 3 + 2];
// 把p加入到点云中
cloud->points.push_back(p);
}
pcl::visualization::CloudViewer viewer("Cloud Viewer");
viewer.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
viewer.runOnVisualizationThread(viewerPsycho);
while (!viewer.wasStopped())
{
user_data++;
}
return 0;
}
安装:sudo apt-get install python-numpy使用:import numpy as np1.建立矩阵a1=np.array([1,2,3],dtype=int) #建立一个一维数组,数据类型是int。也可以不指定数据类型,使用默认。几乎所有的数组建立函数都可以指定数据类型,即dtype的取值。a2=np.array([[1,2,3],[_logm numpy
早晨起床时间:6:50晚上休息时间:21:29今日总结:休息。
每天记录学习,每天会有好心情。*^_^*今天和一个朋友共同完成了一个基于web的java电影票预售管理系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架。我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他。和往常一样选用简单又便捷的MYECLIPSE作为开发工具,基于web的java电影票预售管理系统是一个 后台项目。而这种新型的售票流程自动化、智能分析、科学宏观的管理模式已经..._jαⅴa购买电影票代码只要姓名年龄票价
严重:Exceptionstartingfilteruserloginjava.lang.ClassNotFoundException:com.web.filter.UrlFilteratorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.j...严重: Exception starting filter..._java 代码拉下没tomcat
项目介绍本文从用户的功能要求出发,建立了实验室管理系统,系统中的功能模块主要是实现管理员;首页、个人中心、实验室管理、用户管理、实验室申请管理、设备管理、设备报备管理、设备申请管理、消耗品管理、消耗品领取管理、论坛管理、系统管理,用户前台;首页、实验室、设备、消耗品、论坛信息、新闻资讯、我的、跳转到后台,用户后台;首页、个人中心、实验室申请管理、设备报备管理、设备申请管理、消耗品领取管理,等功能部分;经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与实验室管理系统实现的实际_java sprintboot高校实验室设备管理系统毕业论文
命令:pipinstallMySQL-python报错:_mysql.c(42):fatalerrorC1083:Cannotopenincludefile:'config-win.h':Nosuchfileordirectoryerror:command'C:\\ProgramFiles(x86)\\CommonFiles\\Mic...
【记住:左移位操作低位补0,右移位操作无符号数高位补0,有符号数高位补1】位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。位移位运算符的运算对象、运算规则与结果、结合性如表2-16所示。移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。如果是左移,则..._c语言移位方法求次方
转载于:https://blog.csdn.net/dengjianqiang2011/article/details/8753807一、矩阵的表示在MATLAB中创建矩阵有以下规则:a、矩阵元素必须在”[ ]”内;b、矩阵的同行元素之间用空格(或”,”)隔开;c、矩阵的行与行之间用”;”(或回车符)隔开;d、矩阵的元素可以是数值、变量、表达式或函数;e、矩阵的尺寸不必预先定义..._matlab 计算矩阵表达式
主要区别的话,看CAP选择,大部分注册中心,就是在这个定理去选择的,具体怎么选择,看下文CAP定理: 指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可同时获得。一致性(C): 在分布式系统中的所有数据备份,在同一时刻是否同样的值。(所有节点在同一时间的数据完全一致,越多节点,数据同步..._eureka与zookeeper与consul的区别
1: gdb几种设置断点的方式https://www.cnblogs.com/northhurricane/p/3860393.html2: gdb $pc 可以打断点吗 gdb汇编地址打断点的方式? GDB深入研究https://www.cnblogs.com/lhc-java/p/4999017.html20145215卢肖明 / LinuxNetworkAttackhttps://gitee.com/20145215/LinuxNetworkAttack/blob/mast..._gdb directory
有关win10系统远程桌面连接其他电脑提示内部错误的操作方法想必大家有所耳闻。但是能够对win10系统远程桌面连接其他电脑提示内部错误进行实际操作的人却不多。其实解决win10系统远程桌面连接其他电脑提示内部错误的问题也不是难事,小编这里提示两点:1、在win10旗舰版32位系统中右击桌面上的VMwareworkstation,选择以管理员身份运行软件; 2、或者直接右键,然后点击属性;掌握这些就...
Android设备连接Profiler有两种方式,一种是直接通过IP进行连接,需要手机和电脑处于可连通的网络环境中;另一种是借助ADB命令,使用USB进行连接。我通常都是使用USB的方式,网络连通这个条件可能在大多数工作环境下都比较困难,相比之下使用USB就很方便了,还不用输一串的IP地址。不过USB方式需要执行一个连接转发的命令:adb forward tcp:54999 localabstra..._profiler通讯