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

这篇具有很好参考价值的文章主要介绍了双目视觉——点云与RGB图像融合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、固定向量类

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、图像

双目相机的图像融合,OpenCV 图像/点云处理,3d,计算机视觉

2、点云

双目相机的图像融合,OpenCV 图像/点云处理,3d,计算机视觉

3、彩色点云

双目相机的图像融合,OpenCV 图像/点云处理,3d,计算机视觉

五、参考链接

【OpenCV】关于Vec3b类型的含义与使用
点云与RGB融合文章来源地址https://www.toymoban.com/news/detail-613845.html

到了这里,关于双目视觉——点云与RGB图像融合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度相机介绍(TOF、RGB双目、结构光参数对比)

    一、深度相机的介绍         随着计算机视觉与人工智能技术的飞速发展,采用深度相机进行场景三维重建、目标检测、环境感知等应用越来越广泛,与传统的2D相机不同,深度相机可以通过拍摄空间来获得景深信息,从而获得目标的3D信息,构建3D模型,这也是与普通相机最

    2024年02月05日
    浏览(79)
  • 自学SLAM(6)相机与图像实践:OpenCV处理图像与图像拼接(点云)

    如果写过SLAM14讲第一次的作业,或者看过我之前的运行ORB_SLAM2教程应该都安装过OpenCV了,如果没有安装,没关系,可以看我之前的博客,里面有如何安装OpenCV。 链接: 运行ORB-SLAM2(含OpenCV的安装) 让我们先来看一段代码,学习一下OpenCV的函数调用。 改代码中,演示了如下几

    2024年02月06日
    浏览(41)
  • 激光雷达点云与单幅图像配准/映射变为彩色点云

    如果没有对pcl库进行配置,则需要先配置pcl:可重复使用的VS-PCL1.10.1环境配置 本文提供激光雷达采集的点云与单幅二维图像之间的配准方法,目的是实现点云到图像之间的映射,同时也可以将点云转变为彩色点云。 数据准备: point_cloud: 激光雷达点云数据; img: 与激光雷达对

    2023年04月08日
    浏览(37)
  • 双目视觉(双目相机)

    1.时间同步 需要一个单独的硬件(单片机)单独给每一个相机发送触发信息,然后再接收返回。 2.相机选型:  (1)相机的分辨率 根据对图像精度的要求来选择相机的分辨率。 (2)颜色 通常视觉中我们选择黑白相机,只有需要彩色图像时才会考虑彩色相机,因为机器视觉

    2024年04月27日
    浏览(32)
  • 红外相机和RGB相机标定:实现两种模态数据融合

    RGB相机:森云智能SG2-IMX390,1个 红外相机:艾睿光电IR-Pilot 640X-32G,1个 红外标定板:https://item.taobao.com/item.htm?_u=jp3fdd12b99id=644506141871spm=a1z09.2.0.0.5f822e8dKrxxYI 两种模态相机均未进行内参标定,如果发现原始图片畸变较大,可以先进行内参标定。数据采集代码如下,加热红外标定

    2024年04月17日
    浏览(53)
  • Airsim雷达相机融合生成彩色点云

    代码,cmake,launch等都在网盘链接中 链接: https://pan.baidu.com/s/14hWBDnRZC41xkqAk6FirtA 提取码: 1een --来自百度网盘超级会员v4的分享 3D激光雷达和相机的融合指的是将激光雷达获得的3D点,投影到相机图像上,从而给图像每个像素点添加深度信息或者为雷达获取到的3D点添加RGB信息。

    2024年02月08日
    浏览(45)
  • (16)双目视觉的图像获取

    (1)摄像头参数 https://blog.csdn.net/crazty/article/details/107365147 (2)双目标定方法,过程参照了一下 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python_AI吃大瓜的博客-CSDN博客_双目三维重建 (3)直接放源码的都是好人啊,下面的大佬代码参照了一下,大家仔细看看

    2024年02月05日
    浏览(34)
  • 使用opencv做双目测距(相机标定+立体匹配+测距)

    最近在做双目测距,觉得有必要记录点东西,所以我的第一篇博客就这么诞生啦~ 双目测距属于立体视觉这一块,我觉得应该有很多人踩过这个坑了,但网上的资料依旧是云里雾里的,要么是理论讲一大堆,最后发现还不知道怎么做,要么就是直接代码一贴,让你懵逼。 所以

    2024年01月20日
    浏览(37)
  • Pybullet获取RGB图像和深度图像构建点云(Open3D)

      最近正在做点云分割相关的课题,数据集采集有点麻烦,想通过Pybullet先制作一批仿真合成数据集出来。虽然思路挺清晰,由RGB-D图像生成点云,但是中间有很多地方会卡住,所以写篇blog记录一下。   图像的拍摄挺简单的,直接用Pybullet现成的函数就可以获取RGB图像和

    2024年01月16日
    浏览(57)
  • 基于 ZYNQ 的双目视觉图像采集系统设计(四)

    1、axi_hp0_wr.v 模块代码解析         该模块实现 AXI HP 总线写入数据到 DDR3 的操作。该模块的接口如下。 rst_n 为系统复位信号; i_clk 、 i_data_rst_n 、 i_data_en 和 i_data 为 FPGA 逻辑需要写入到 DDR3 的数据输入接口。 i_clk 为同步时钟信号, i_data_rst_n 用于复位 FIFO , i_data_en 拉高表

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包