双目视觉——点云与RGB图像融合

2023-05-16

目录

  • 一、固定向量类
    • 1、cv::Vec
    • 2、读取像素
  • 二、点云着色
  • 四、结果展示
    • 1、图像
    • 2、点云
    • 3、彩色点云
  • 五、参考链接

一、固定向量类

1、cv::Vec

   在OpenCV中针对三通道矩阵,定义的Vec类型有:cv::Vec3bcv::Vec3scv::Vec3wcv::Vec3dcv::Vec3fcv::Vec3i6种类型。其中的数字表示通道个数,最后一位是数据类型的缩写。

  • cv::Vec3b:b是uchar类型的缩写。
  • cv::Vec3s:s是short类型的缩写。
  • cv::Vec3w:w是ushort类型的缩写。
  • cv::Vec3d:d是double类型的缩写。
  • cv::Vec3f:f是float类型的缩写。
  • cv::Vec3i:i是int类型的缩写。
       对于二通道和四通道也定义了对应的变量类型,也有同样的命名规则。例如:cv::Vec2b表示二通道uchar类型。

2、读取像素

   由于在OpenCV中,使用imread读取到的Mat图像数据,都是用uchar类型的数据存储,对于RGB三通道的图像,每个点的数据都是一个Vec3b类型的数据。

使用at定位方法如下:

Mat mat = imread("test.jpg");

//(row, col)即所需要定位点的坐标
mat.at<Vec3b>(row, col)[0] = 255;  //修改点 (row, col) 的 B 通道数据
mat.at<Vec3b>(row, col)[1] = 255;  //修改点 (row, col) 的 G 通道数据
mat.at<Vec3b>(row, col)[2] = 255;  //修改点 (row, col) 的 R 通道数据

二、点云着色

   将双目相机的图像色彩添加到点云上生成彩色点云(PointXYZRGB点云)

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <opencv2/opencv.hpp>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>

using namespace std;

int	main(int argc, char** argv)
{
	// --------------------------------加载点云---------------------------------
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);  
	if (pcl::io::loadPCDFile<pcl::PointXYZ>("test.pcd", *cloud) == -1)
	{
		PCL_ERROR("读取点云失败 \n");
		return (-1);
	}
	// -------------------------------加载图像----------------------------------
	cv::Mat img = cv::imread("test.jpeg");  //读入图片
	if (img.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}
	cv::imshow("image", img);  //显示图片
	// ----------------------------点云与图像融合-------------------------------
	pcl::PointCloud<pcl::PointXYZRGB>::Ptr pointcloud(new pcl::PointCloud<pcl::PointXYZRGB>); 

	for (int r = 0; r < img.rows; r++) 
	{
		for (int c = 0; c < img.cols; c++)
		{
			pcl::PointXYZRGB point;
			// opencv中的颜色为Scalar(B,G,R),PCL中的颜色为RGB,需要做到一一对应
			point.x = cloud->points[r * img.cols + c].x;
			point.y = cloud->points[r * img.cols + c].y;
			point.z = cloud->points[r * img.cols + c].z;
			point.r = img.at<cv::Vec3b>(r, c)[2];
			point.g = img.at<cv::Vec3b>(r, c)[1];
			point.b = img.at<cv::Vec3b>(r, c)[0];
			pointcloud->push_back(point);
		}
	}
	// -----------------------保存生成的点云到本地文件夹--------------------------------
	pcl::io::savePCDFileASCII("RGB真彩点云.pcd", *pointcloud);
	// -----------------------------使用PCL可视化点云-----------------------------------
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
	pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(pointcloud);// 显示RGB
	viewer->addPointCloud<pcl::PointXYZRGB>(pointcloud, "sample cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud"); // 设置点云大小
	// 启动可视化
	viewer->addCoordinateSystem(1000);  // 显示XYZ指示轴
	viewer->initCameraParameters();    // 初始化摄像头参数
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
	}

	return 0;
}

四、结果展示

1、图像

在这里插入图片描述

2、点云

在这里插入图片描述

3、彩色点云

在这里插入图片描述

五、参考链接

【OpenCV】关于Vec3b类型的含义与使用
点云与RGB融合

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双目视觉——点云与RGB图像融合 的相关文章

随机推荐

  • C++ day42 C++的其他类库(除STL外)

    STL已经提供了一个非常好的可重用代码源 xff0c STL工具可以被用来解决很多编程问题了 xff0c 但是C 43 43 还是觉得不够 xff0c 在STL之外 xff0c 也提供了一些模板类 xff0c 这些模板类基本都是用来做一件很
  • python爬虫beautifulsoup详细教程

    BeautifulSoup4是爬虫必学的技能 BeautifulSoup最主要的功能是从网页抓取数据 xff0c Beautiful Soup自动将输入文档转换为Unicode编码 xff0c 输出文档转换为utf 8编码 Beautifu
  • pandas用法详解

    一 生成数据表 1 首先导入pandas库 xff0c 一般都会用到numpy库 xff0c 所以我们先导入备用 xff1a import numpy as np import pandas as pd 2 导入CSV或者xlsx文件 xf
  • 程序员读书顺序!

    程序猿的读书历程 xff1a xx语言入门 gt xx语言应用实践 gt xxx语言高阶编程 gt xxx语言的科学与艺术 gt 编程之美 gt 编程之道 gt 编程之禅 gt 颈椎病康复指南
  • 基于STM32的倾斜仪设计(二)—— 硬件设计(2)

    2 4控制电路 本实验中选用的控制核心是STM32系列单片机 xff0c 具体型号为STM32F103R8T6 STM32F103R8T6是一款嵌入式 微控制器集成电路 xff0c 是ST旗下的一款常用的增强型系列微控制器 此芯片工作电压为
  • win32多媒体定时器

    win32多媒体定时器 因为编程需要以1ms为周期调用一个函数 xff0c 故在Windows平台上测试了一些定时器 xff0c 并进行比较 xff0c 最终选用timeSetEvent作为最终选项 几个拉跨的定时器精度 select选择模
  • 树莓派005_L298N电机控制板

    硬件接口 ENA IN1 IN2 控制左边的电机A xff0c ENB IN3 IN4控制右边的电机B 以上六个全部接GPIO口 xff0c 可通过pwm控制ENA ENB实现调速 43 12V为外接电源正极接入口 GND为外接电源负极接入
  • Vue实现Enter键查询

    单个条件 xff1a 64 keyup span class token punctuation span enter span class token punctuation span native span class token op
  • 图文详解教你在线换系统(无须U盘)

    1 先去msdn下载需要安装的系统 建议不要下载到系统盘 系统下载传送门 2 系统下载后 xff0c 双击打开找到setup xff0c 然后以管理员权限打开 3 打开windows安装界面后 xff0c 选择更改windows安装程序下载
  • 从零开始写一个图像处理程序之一(BMP彩色图转灰度图)

    图像二值化可以直接调用opencv的二值化函数去完成处理 xff0c 但是不利用OpenCV从头手写一个处理图片程序未尝不是一件有意思的事情 xff0c 就拿BMP图片为例去做一个 BMP图像 xff1a BMP xff08 Bitmap
  • 智能革命和未来社会《智能时代--大数据和智能革命重新定义未来》

    通过区块链 xff08 Block Chain xff09 在未来跟踪每一件商品从制造出来到被消费的完整行踪 比特币在一定程度上起到货币的作用 xff0c 并且成为全球很安全的洗钱工具 xff0c 源于它背后的一个技术 区块链 block即
  • Git 版本回退方法

    场景一 xff1a 如果想将代码恢复到之前某个提交的版本 xff0c 且那个版本之后提交的版本都不要了 xff0c 就可以使用 git rest 原理 xff1a git reset的作用是修改HEAD的位置 xff0c 即将HEAD指向的
  • Antd form表单的使用、设值、取值、清空值

    1 使用 this props form getFieldDecorator 34 key 34 lt Input gt 3 设值 this props form setFieldsValue key 39 123 39 2 取值 this
  • 静态类,方法,成员

    说起静态类 xff0c 你可能会联想到实例类 这两者并不难区分 xff0c 前者 静态类 只在内存中创建一个 xff0c 而后者 实例类 则是每次实例化后 xff0c 就会再内存创建一份 今天来简单聊一下静态类的理解 代码情景 xff1a
  • shell脚本批量执行可执行文件

    touch一个test sh文件 xff0c 按下方例子vim写入 xff1a span class token comment bin bash span span class token function echo span span
  • git 本地改动了,不保留,直接拉取线上最新代码

    如果您在本地做了改动 xff0c 但是又不想保留这些改动 xff0c 可以使用以下命令强制拉取远程最新代码 xff0c 覆盖掉本地代码 xff1a span class token function git span fetch all s
  • C语言创建单链表

    单链表 链表是一种物理存储单元上非连续 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 xff08 链表中每一个元素称为结点 xff09 组成 xff0c 结点可以在运行时动态生成 每个结
  • kvaser二次开发

    总结归纳 xff1a 实施步骤 xff1a 通过浏览网上的大量关于can总线开发的资料 xff0c 建立起对can总线软件开发的大致流程记录优质资料将开发过程流程化通过官方资料研究技术细节开工 技术要点 xff1a can协议 xff0c
  • vue瀑布流布局插件vue-masonry

    插件npm网址 https www npmjs com package vue masonrygithub xff1a https github com shershen08 vue masonry安装 npm install vue ma
  • 双目视觉——点云与RGB图像融合

    目录 一 固定向量类1 cv Vec2 读取像素 二 点云着色四 结果展示1 图像2 点云3 彩色点云 五 参考链接 一 固定向量类 1 cv Vec 在OpenCV中针对三通道矩阵 xff0c 定义的Vec类型有 xff1a cv Vec