双目相机计算稠密深度点云详解教程

2023-11-01

点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

作者:本文为3D视觉开发者社区特约作者-熊猫飞天授权发布。

引言:本教程主要内容为介绍如何使用双目相机计算出稠密的3D点云。主要涉及到elas包的使用,通过KITTI数据集和ZED相机进行测试。在机器人导航中深度图是产生稠密3D环境地图的重要数据,在室内机器人一般使用基于主动红外测距原理的RGB-D相机(比如kinect)获取深度图像,RGB-D相机由于其测量范围和原理导致它主要适用于室内环境中。在室外环境中由于双目相机没有尺度问题,通常使用双目相机计算深度图。

一、双目立体匹配原理

首先我们先介绍一些在双目立体匹配中的名称和双目图像立体匹配的流程。


图片来源于[1]

这里涉及几个定义:
基线:左右光心的连线
极点:像平面与基线的交点称为极点
极线:像点与极点之间的连线称为极线
极平面:左右极线与基线构成的平面为空间点对应的极平面

利用双目相机计算稠密的深度需要经过3个步骤:(图像矫正,视差计算)

1.1 图像矫正

步骤1:图像矫正,这个部分可以细分为图像去畸变矫正和图像立体匹配

图像去畸变是利用图像的畸变参数 [d1 d2 d3 p1 p2] 对图像畸变进行校正,检测方法就是,原本在图像边缘的直线由于相机的畸变导致在成像的时候变成了曲线,通过畸变校正以后,在图像中变成的直线,如下图所示:

这个也称作相机的内参数校准(焦距 fx fy 相机中心 cx cy),通常我们调用ROS里面的包就可以实现了。

步骤2:立体畸变校正

立体匹配是指把左右图像旋转到同一个平面(这里说同一个平面不太准确,应该是两个平行的平面),使得左右两幅图片的光轴平行,检测方法是判断左右目图像中的同一个像素点是否在同一水平线上面。

立体矫正是校准相机的外参数实现的,这个也可以通过ROS下的相机校准包实现,只需要输入棋盘格的size即可。校准的参数包括(基线 fx 相机的R矩阵 投影矩阵P矩阵)


在获得相机的内参数和外参数以后我们可以调用opencv的函数对双目的图像进行矫正,如下所示:

cv::initUndistortRectifyMap(K_l,D_l,R_l,P_l.rowRange(0,3).colRange(0,3),cv::Size(cols_l,rows_l),CV_32F,M1l,M2l);cv::initUndistortRectifyMap(K_r,D_r,R_r,P_r.rowRange(0,3).colRange(0,3),cv::Size(cols_r,rows_r),CV_32F,M1r,M2r);
cv::remap(img_left,imLeft,M1l,M2l,cv::INTER_LINEAR);cv::remap(img_right,imRight,M1r,M2r,cv::INTER_LINEAR);
还有一种方式是通过ROS自带的包实现,以下是通过launch文件来启动两个节点分别处理左目和右目图像
<launch><!-- If you already have rectified camera images remove the image_proc nodes --><group ns="stereo/left"><node name="left_rect" pkg="image_proc" type="image_proc"/></group>
<group ns="stereo/right"><node name="right_rect" pkg="image_proc" type="image_proc"/></group>
</launch>
1.2 视差计算

视差定义为 特征点p在左目图像中的像素坐标减去右目图像的像素坐标:disparity=xl-xr ,这里只计算横坐标的差值,因为输入的图像认为是已经立体矫正过的图像了,其左右目同一个像素在一条直线上。深度与视差转换关系:depth = (fx * baseline) / disparity,其中 baseline表示基线的长度。

双目立体匹配实质是指,如果利用双目相机在同一个时刻采集到的左、右目图像,生成一个3D的点云图。

双目计算深度点云的ROS包有两个: stereo_image_proc 和 LIBELAS(: Library for Efficient Large-scale Stereo Matching)两个库,其中LIBELAS提供了一个ROS环境下的包 elas_ros 可以在ROS下面直接使用。

ELAS这个库计算的深度相比于 stereo_image_proc 更加的稠密,推荐使用ELAS这个库。

二、elas_ros 包运行

ELAS [2] 是一种基于概率模型的有效立体匹配算法,该算法具有两个假设:(I)某些立体对应关系可以得到可靠匹配,(II)像素i的视差独立于所有其他像素。因此,ELAS首先使用梯度图像上的SAD匹配来计算稀疏的支持点集,然后使用Delaunay三角剖分来构造用于密集匹配的2D网格。最后,使用最大后验(MAP)模型来估计视差。如果对文章感兴趣的话,可以阅读以下大佬在FPGA上对ELAS算法实现了加速 [3],并开源了代码 [4].
1、首先在 elas_ros 的github地址上下载代码包,然后进行编译

cd ~/catkin_ws/srcgit clone https://github.com/jeffdelmerico/cyphy-elas-ros.gitcd ..catkin_make
2、参考 elas_ros 中launch文件夹下面 elas.launch 文件,新建一个名为 dataset.launch 的文件夹,并把launch文件第四行的 参数 "stereo" 修为 "narrow_stereo_textured" 修改后的 dataset.launch 文件内容如下:
<launch><!-- Launches ELAS node, and rectification nodes for input --><!-- Arguments: input stereo namespace and output elas namespace --><arg name="stereo" default="narrow_stereo_textured"/><arg name="elas_ns" default="elas"/>
<!-- If you already have rectified camera images remove the image_proc nodes --><group ns="$(arg stereo)/left"><node name="left_rect" pkg="image_proc" type="image_proc"/></group>
<group ns="$(arg stereo)/right"><node name="right_rect" pkg="image_proc" type="image_proc"/></group>
<!-- This node actually does the stereo reconstruction --><node name="$(arg elas_ns)" pkg="elas_ros" type="elas_ros" output="screen"><remap from="stereo" to="$(arg stereo)"/><remap from="image" to="image_rect"/>
<param name="approximate_sync" value="true" /><param name="disp_min" type="int" value="0"/><param name="disp_max" type="int" value="255"/><param name="support_threshold" type="double" value="0.95"/><param name="support_texture" type="int" value="10"/><param name="candidate_stepsize" type="int" value="5"/><param name="incon_window_size" type="int" value="5"/><param name="incon_threshold" type="int" value="5"/><param name="incon_min_support" type="int" value="5"/><param name="add_corners" type="bool" value="0"/><param name="grid_size" type="int" value="20"/><param name="beta" type="double" value="0.02"/><param name="gamma" type="double" value="3"/><param name="sigma" type="double" value="1"/><param name="sradius" type="double" value="2"/><param name="match_texture" type="int" value="1"/><param name="lr_threshold" type="int" value="2"/><param name="speckle_sim_threshold" type="double" value="1"/><param name="speckle_size" type="int" value="200"/><param name="ipol_gap_width" type="int" value="300"/><param name="filter_median" type="bool" value="0"/><param name="filter_adaptive_mean" type="bool" value="1"/><param name="postprocess_only_left" type="bool" value="1"/><param name="subsampling" type="bool" value="0"/>
<!-- If your cameras are not synchronised then uncomment the following line --><!-- <param name="approximate_sync" value="true" type="bool"/> --></node></launch>
3、下载我们所用的测试数据集 “rotating_detergent_1_6.bag”,(下载链接:https://pan.baidu.com/s/1uXsNj77OydZoDxaK4PIjIw 提取码:e9ga)
数据集源地址:http://download.ros.org/data/stereo_image_proc/rotating_detergent_1_6.bag

4、新建三个终端,然后启动节点

  • 启动 elas_ros

    roslaunch elas_ros dataset.launch
    
  • 播放 rosbag

    rosbag play  rotating_detergent_1_6.bag
    
  • 启动 rviz

    rosrun rviz rviz
    

在RVIZ中添加对应的话题,即可看到视差图和点云图:


elas双目点云建图

3、KITTI数据集运行

3.1 kitti数据集转换为rosbag

在运行双目深度话的过程中我们首先需要把KITTI数据集转换为rosbag,以便使用。kitti数据集转换为rosbag 可以参考博客: KITTI数据集测试 - 1 从KITTI数据到rosbag

python img2bag_kitti_odo.py /your directory/KITTI/dataset/sequences/00/image_0 kitti_00.bag /your directory/KITTI/dataset/sequences/00/times.txt
除此之外还有两个包也可以实现这个功能,第一个是 ethz-asl 的 kitti_to_rosbag包,但是 kitti_to_rosbag 需要依赖很多的包,这我没有使用这个包,感兴趣的小伙伴可以研究一下。还有一个是 kitti2bag 。

这里需要注意添加上双目之间的基线信息(通常是在P矩阵中加入bf=基线*fx)。其次我所使用的kITTI的数据及是对齐以后的数据集,也就是KITTI官网上Odometry那个网页上的,其中的图像是经过立体矫正以后的图像,因此我们在使用kitti数据集时,不需要包含图像立体矫正的包

3.2 运行KITTI数据集

创建一个名为 kitti.launch 的 launch 文件写入以下内容

<launch>
<!-- Launches ELAS node, and rectification nodes for input -->
<!-- Arguments: input stereo namespace and output elas namespace -->
<arg name="stereo" default="camera"/>
<arg name="elas_ns" default="elas"/>


<!-- If you already have rectified camera images remove the image_proc nodes -->
<group ns="$(arg stereo)/left">
<node name="left_rect" pkg="image_proc" type="image_proc"/>
</group>


<group ns="$(arg stereo)/right">
<node name="right_rect" pkg="image_proc" type="image_proc"/>
</group>


<!-- This node actually does the stereo reconstruction -->
<node name="$(arg elas_ns)" pkg="elas_ros" type="elas_ros" output="screen">
<remap from="stereo" to="$(arg stereo)"/>
<remap from="image" to="image_rect"/>


<param name="disp_min" type="int" value="0"/>
<param name="disp_max" type="int" value="255"/>
<param name="support_threshold" type="double" value="0.95"/>
<param name="support_texture" type="int" value="10"/>
<param name="candidate_stepsize" type="int" value="5"/>
<param name="incon_window_size" type="int" value="5"/>
<param name="incon_threshold" type="int" value="5"/>
<param name="incon_min_support" type="int" value="5"/>
<param name="add_corners" type="bool" value="0"/>
<param name="grid_size" type="int" value="20"/>
<param name="beta" type="double" value="0.02"/>
<param name="gamma" type="double" value="3"/>
<param name="sigma" type="double" value="1"/>
<param name="sradius" type="double" value="2"/>
<param name="match_texture" type="int" value="1"/>
<param name="lr_threshold" type="int" value="2"/>
<param name="speckle_sim_threshold" type="double" value="1"/>
<param name="speckle_size" type="int" value="200"/>
<param name="ipol_gap_width" type="int" value="300"/>
<param name="filter_median" type="bool" value="0"/>
<param name="filter_adaptive_mean" type="bool" value="1"/>
<param name="postprocess_only_left" type="bool" value="1"/>
<param name="subsampling" type="bool" value="0"/>


<param name="approximate_sync" value="true" />
<param name="queue_size" type="int" value="5"/>
<!-- If your cameras are not synchronised then uncomment the following line -->
<!-- <param name="approximate_sync" value="true" type="bool"/> -->
</node>


<!--node pkg="rviz" type="rviz" name="$(anon rviz)" respawn="false" output="screen" args="-d $(find elas_ros)/rviz/KITTI.rviz" / -->
</launch>
注:在上述launch文件中的第7行-14行,这里我偷懒为不去修改topic 我依旧保留了这个图像立体矫正的,实际中输入已经矫正过的图像情况下不需要再使用这段代码了。

接下来播放kitti对应的rosbag包并启动elas_ros既可以:

roslaunch elas_ros kitti.launchrosbag play kitti_01.bag
这样就可以看到使用elas_ros包实时构建的双目点云了,这个包大约可以以10HZ左右的频率运行,因此在用于建图时候最好还是使用关键帧。


(ELAS在KITTI数据集上的运行效果)

elas

参考资料

官方教程:https://github.com/MichaelGrupp/evo
[1] https://blog.csdn.net/luoru/article/details/49048287
[2] Geiger A, Roser M, Urtasun R. Efficient large-scale stereo matching[C]//Asian conference on computer vision. Springer, Berlin, Heidelberg, 2010: 25-38.
[3] Rahnama O, Frost D, Miksik O, et al. Real-time dense stereo matching with ELAS on FPGA-accelerated embedded devices[J]. IEEE Robotics and Automation Letters, 2018, 3(3): 2008-2015.
[4] https://github.com/torrvision/ELAS_SoC
[5] Jellal R A, Lange M, Wassermann B, et al. LS-ELAS: Line segment based efficient large scale stereo matching[C]//2017 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2017: 146-152.

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

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

双目相机计算稠密深度点云详解教程 的相关文章

  • 使用畸变从图像平面计算相机矢量

    我正在尝试使用相机模型来重建可以使用某些相机及其 外部 内部 参数拍摄的图像 这一点我没有任何问题 现在我想添加扭曲 正如它们中所描述的那样OpenCV https docs opencv org 4 x dc dbb tutorial p
  • 在opencv中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • 相机姿态估计(OpenCV PnP)

    我正在尝试使用网络摄像头从具有已知全球位置的四个基准点的图像中获取全局姿态估计 我检查了许多 stackexchange 问题和一些论文 但似乎无法得到正确的解决方案 我得到的位置数字是可重复的 但与相机移动绝不成线性比例 仅供参考 我正在
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • 如何解决 Python 'Pyzbar' 库的导入错误?

    我刚刚开始熟悉 Pyzbar 库 但是当使用decode方法我得到一个错误 这是代码 import cv2 import numpy as np import pyzbar code image cv2 imread C Users Ace
  • 使用 openCV 和 python 检测物体

    我正在尝试使用 OpenCV 和 Python 检测下图中的白点 我尝试使用函数 cv2 HoughCircles 但没有成功 我需要使用不同的方法吗 这是我的代码 import cv2 cv import numpy as np impo
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • 计算两个描述符之间的距离

    我正在尝试计算已计算的两个描述符之间的距离 欧几里得或汉明 问题是我不想使用匹配器 我只想计算两个描述符之间的距离 我正在使用 OpenCV 2 4 9 并且我的描述符存储在 Mat 类型中 Mat descriptors1 Mat des
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • 来自 OpenCV 的外部参数

    我正在使用 OpenCV 来校准立体相机对 我拍摄了各种校准照片 并且使用 cv2 calibrateCamera 对内在参数进行了令人满意的拟合 然而 目前尚不清楚如何获取外部参数 该函数仅返回cameraMatrix 尽管它很有用 但实
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • 如何删除树莓派的相机预览

    我在我的 raspberryPi 上安装了 SimpleCv 并安装了用于使用相机板的驱动程序 uv4l 驱动程序 现在我想使用它 当我在 simpleCV shell Camera 0 getImage save foo jpg 上键入时
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • OpenCV 3 中的 FLANN 错误

    我运行的是 Ubuntu 14 04 我正在尝试使用 openCV 3 运行 FLANN 但出现错误 下面的所有内容都是通过使用 AKAZE 和 ORB 进行尝试的 但代码来自我尝试使用 ORB 的情况 我使用 ORB 来查找描述符和关键点
  • BASH 脚本编译多个 C++ 文件 - OpenCV

    请参见在C 和OpenCV中调用其他文件中的函数 https stackoverflow com questions 24442836 call functions in other files in c and opencv 对于最初的问
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • OpenCV C++ 如何知道每行的轮廓数进行排序?

    我有一个二值图像 https i stack imgur com NRLVv jpg在这张图片中 我可以使用重载的函数轻松地对从上到下 从左到右找到的轮廓进行排序std sort 我首先通过以下方式从上到下排序 sort contours
  • OpenCV 2.3 与 VS 2008 - 鼠标事件

    强制性 我是新手 有一份涉及编程的工作 并且我一边工作一边自学 不用说 作为一名老师 我经常犯彻底的错误 我现在所处的位置 我创建了 Graph 类 它 令人惊讶的是 制作了图表 但现在我想通过单击鼠标来修改图形 但我似乎无法让鼠标处理程序
  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h

随机推荐

  • PWM驱动MOS管H桥电路分析

    H桥是一个典型的直流电机控制电路 因为它的电路形状酷似字母H 故得名与 H桥 4个三极管组成H的4条垂直腿 而电机就是H中的横杠 注意 图中只是简略示意图 而不是完整的电路图 其中三极管的驱动电路没有画出来 01 H桥驱动原理 1 电机驱动
  • 网络安全-文件包含漏洞原理、攻击及防御

    目录 简介 类型 原理 攻击 仅本地文件包含 防御 简介 文件包含 是一个功能 在各种开发语言中都提供了内置的文件包含函数 可以使开发人员在一个代码文件中直接包含 引入 另外一个代码文件 类型 根据不同的配置环境 文件包含漏洞分为如下两种情
  • Qt - QLabel设置字体颜色

    Qt QLabel设置字体颜色 第一种 使用setPalette 方法如下 QLabel label new QLabel tr Hello Qt QPalette pe pe setColor QPalette WindowText Qt
  • 等级保护2.0四级通用要求测评方法

    等级保护2 0四级通用要求测评方法
  • Python 使用 smtp ssl 模式 发送邮件与附件

    参考 发送邮件简单入门 以qq邮箱 163邮箱为例 https blog csdn net qq 38661599 article details 81013834 smtp ssl 模式 发送邮件 与 附件 https www cnblo
  • Vue-组件之间的的数据传递

    目录 组件的使用 注册全局组件 props组件 组件之间样式冲突问题 父 子关系传递 子 父关系传递 兄弟之间的传递 ref引用 什么是组件 只要是 vue后缀的文件都是一个组件 而组件之间是独立的 相互之间没有关系 当在使用组件的时候 根
  • 数据库 数据结构设计实验报告 包括er图转关系模式

    年级 班号 组号 学号 专业 日期 姓名 实验名称 实验一 数据库设计 实验室 实验 目的 或 要求 1 通过了解具体的应用案例体验数据库的应用 以及数据库系统和应用程序之间的关联关系 从而进一步理解数据 数据库 DBMS基本概念知识 2
  • chatgpt赋能python:如何利用Python绘制窗口

    如何利用Python绘制窗口 作为一门高级编程语言 Python具备强大的绘图能力 可以用来创建各种窗口应用程序 本篇文章将介绍如何利用Python绘制窗口 并分析其在搜索引擎优化方面的作用 绘制窗口的基本步骤 要利用Python绘制窗口
  • 测试-python筑基1.1-(列表/元组/字典/集合/字符串)

    列表 列表 列表 一种将多个数据组合到一起的容器 标识符 关键字 list 给列表赋值变量名的时候 不要用关键字 list 1 定义一个空列表 list 2 1 2 3 4 5 定义一个有值的列表 不是数组 print type list
  • Spring+mybatis+Druid+AbstractRoutingDataSource配置多数据源切换进行读写分离

    自我理解是这样的 首先配置事务管理器设置设置方法是否是只读创建一个DynamicDataSourceTransactionManager的类继承DataSourceTransactionManager去重写doBegin与doCleanup
  • SPSS数据分析中出现的常见问题总结

    总结最近数据分析过程中遇到的一些问题的思考 1 问卷中多选题的录入与分析 2 数据分析流程的第一步 对所分析的样本数据本身的特征结构进行预分析 3 根据数据中的某个因素的几个水平来分析数据总体的差异性 4 根据数据中的变量之间的相关性 了解
  • 如何使用 MSYS2 编译最新版的 coreutils 源码(目前最新版本为 coreutils-9.4)

    文章目录 一 coreutils 源码下载 二 MSYS2 安装编译工具 1 pacman Suy 更新软件仓库 2 pacman S msys gcc 安装gcc 3 pacman S msys make 安装make工具 4 解压缩 c
  • python基础练习(猜拳游戏、扎金花游戏、购物小程序)

    猜拳游戏 需求分析 使用面向对象和python的基础语法 运用简单的逻辑处理实现猜拳游戏 要求游戏可以多次玩耍 要求统计分数 要求可以选择角色 玩家自己的类 class Owns chose 1 石头 2 剪刀 3 布 def init s
  • Java foreach语句的用法

    Java foreach语句用法使用 如何使用Java1 5出现的foreach语句 foreach语句 for循环 foreach语句的使用注意事项 如何使用Java1 5出现的foreach语句 foreach在遍历数组 集合方面 fo
  • 【图像分割】实现snake模型的活动轮廓模型以进行图像分割研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 图像分割是计算机视觉领域的一个重要研究方向
  • element中el-table根据状态改变样式,你不能错过的技能

    前言 在开发中 如何根据数据的状态来改变表格的样式一直是一个常见的难题 如果你也曾经为此苦恼过 那么本文将为你介绍如何使用 element 中的 el table 来实现这一目标 让你的数据展示更加直观 易于理解 需求效果 需求 表格中当前
  • 筛选kepler.csv中未下载到的kepid

    In 1 判断输入字符串是否在路径中函数 import os def findfile2 keyword keyword 9d int keyword judgeExist False root os path join C Users 9
  • snapgene设计引物_分子克隆之引物设计(一)

    分子克隆之引物设计 一 目的 将目的基因Homosapiens interleukin 37利用引物扩增表达带上限制酶酶切位点 再与载体pcDNA3 1 3xFlag C酶切连接 师兄给定的酶切位点是 固定 BamH I GGATCC Xh
  • bilibili直播间接收监听和发送弹幕api

    参考文 https blog csdn net fei347795790 article details 111164254 Python实现自动发送B站直播弹幕软件 https blog csdn net fzq13994952987 a
  • 双目相机计算稠密深度点云详解教程

    点击上方 计算机视觉工坊 选择 星标 干货第一时间送达 作者 本文为3D视觉开发者社区特约作者 熊猫飞天授权发布 引言 本教程主要内容为介绍如何使用双目相机计算出稠密的3D点云 主要涉及到elas包的使用 通过KITTI数据集和ZED相机进