自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你好,明天,,的博客

计算机相关,写文章

  • 博客(143)
  • 资源 (1)
  • 收藏
  • 关注

原创 OpenCV基于PnP的双目相机外参标定C++

摘要:本文详细介绍了基于PnP(Perspective-n-Point)问题的相机外参标定方法,包括单相机外参求解和双目相机相对外参计算。通过激光跟踪仪获取高精度3D点坐标,结合图像中的2D投影点,利用solvePnP和solvePnPRansac算法求解相机旋转矩阵和平移向量。文章重点阐述了数据处理流程、多种PnP算法比较、RANSAC优化方法,以及双目外参的相对变换计算原理(R=R2R1^T,T=T2-RT1)。同时提供了完整的OpenCV实现代码,包含数据读取、标定计算、重投影误差分析和结果验证等功能

2025-11-28 16:05:25 669

原创 OpenCV单目相机内参标定C++(2)

本文介绍了一种改进的单目相机标定方法,基于张正友标定法实现。相比之前存在代码臃肿、硬编码文件名、缺乏容错机制等问题,新方法采用模块化设计,支持动态文件检测和错误处理,并提供全面的质量评估。标定过程包括图像采集、角点检测、核心标定和质量验证四个步骤,通过计算重投影误差评估标定质量,并对内参矩阵和畸变系数进行合理性检查。改进后的方法支持可配置的标定标志,结果以YAML格式保存,便于后续使用。实验表明,该方法能够获得更准确可靠的相机参数,重投影误差在合理范围内(优秀<0.2像素,良好0.2-0.5像素)。

2025-11-28 15:05:51 598

原创 VMware虚拟机安装ROS并可视化教程

本文介绍了ROS安装及测试的完整流程。首先需确认Ubuntu版本(如20.04对应ROS Noetic),删除旧源后添加正确的ROS源。安装完成后需配置环境变量并验证安装(roscore)。通过运行小乌龟演示测试功能:启动roscore后,分别运行仿真器和控制节点。文章还提供了节点/话题检查命令,以及当基础方法失效时的替代方案(如直接发布话题命令或使用rqt控制)。最后说明了如何停止ROS服务及常见问题的排查方法。

2025-11-14 11:52:07 274

原创 C++八股文总结

C++核心特性及机制摘要:C++以面向对象(OOP)为核心,支持封装/继承/多态三大特性,同时提供泛型编程(模板)、资源管理(RAII)等机制。相较于C语言,新增函数重载、运算符重载、异常处理等特性。内存管理包含栈/堆/全局/常量/代码五大分区,智能指针(unique_ptr/shared_ptr)解决内存泄漏问题。多态通过虚函数表实现,STL提供容器/算法等组件。构造函数/析构函数实现对象生命周期管理,constexpr定义编译期常量,explicit防止隐式转换。多线程支持包括thread/mutex等

2025-09-12 09:46:29 965

原创 两遍扫描连通域标记算法(CCL)——C代码实现

两遍扫描连通域标记算法(CCL)是一种适合FPGA/嵌入式环境的替代递归flood_fill的方法。该算法通过两遍扫描完成:第一遍扫描赋予临时标签并记录等价关系,使用8邻域或4邻域检查邻居像素,通过并查集管理标签合并;第二遍扫描建立轮廓结构,将像素坐标添加到对应标签的轮廓点集中。算法最后会过滤过小轮廓(如少于3个像素点),输出有效的轮廓数组。该方法避免了递归调用,更适合硬件实现,同时保持了与flood_fill相同的轮廓提取效果。

2025-07-09 09:22:41 519

原创 ‌findContours()边缘检测——C代码实现

OpenCV的findContours()函数用于检测二值图像中的轮廓。该函数要求输入为二值图像(前景255,背景0),通过扫描图像(从上到下、从左到右)寻找未访问的白色像素作为轮廓起点,然后使用边界跟踪算法(4/8邻域)进行轮廓检测。轮廓结果可保存为点集,并支持多种检索模式(如仅外部轮廓RETR_EXTERNAL或完整层级RETR_TREE)和近似方法(存储所有点或压缩冗余点)。文中还提供了C语言实现方案,使用栈结构进行深度优先搜索处理8邻域连通区域,并给出了完整的代码框架,包括图像加载、轮廓提取和内存管

2025-06-27 10:42:54 843

原创 形态学运算——C代码实现

摘要:形态学运算包含腐蚀(缩小亮区)、膨胀(扩大亮区)和开运算(腐蚀+膨胀)。圆盘结构元具有旋转对称性优势,能平滑边缘并保持圆形特征。通过调整半径可控制处理强度:小半径去噪,大半径分离物体。文中提供了C语言实现代码,包含腐蚀、膨胀和开运算函数,支持圆盘、矩形和十字结构元。开运算通过先腐蚀后膨胀实现,调用方法包括加载图像、处理并保存结果。

2025-06-13 14:45:23 433

原创 Sobel 算子边缘检测——C代码实现

Sobel算子是一种经典的边缘检测方法,通过两个3×3卷积核(水平方向Gx和垂直方向Gy)计算图像梯度,检测灰度变化剧烈的边缘区域。其核心思想是通过加权计算突出中心像素的重要性,提升抗噪能力。算法计算每个像素的梯度强度G=|Gx|+|Gy|,通过阈值处理生成边缘图像。优点包括计算简单、方向敏感性及一定抗噪性,但存在对模糊边缘和噪声敏感的缺点,常需配合平滑预处理使用。文中还提供了Sobel边缘检测的C语言实现代码示例。

2025-06-04 15:18:11 708

原创 计算机视觉中用到的差分划分通道二值化等方法——C语言代码实现

摘要:本文介绍在C语言环境中不使用OpenCV实现基础图像处理功能的方法。通过自定义Image结构体和stb_image库实现图像加载/保存,详细说明了通道拆分、差分运算和二值化等核心功能的纯C实现。重点包括:1)使用stb_image处理图像I/O;2)RGB通道分离的内存管理;3)两帧差分运算实现;4)两种二值化处理方式(阈值法和非零法)。代码示例展示了如何手动管理图像数据缓冲区并实现基本图像处理流程,为嵌入式等受限环境下的图像处理提供解决方案。

2025-05-30 15:39:17 527

原创 UDP编解码打包发送C++代码总结

本文介绍了UDP数据编码打包与解码处理的实现方法。主要内容包括:1) 通用UDP发送封装函数,实现socket初始化、数据发送和关闭功能;2) 数据包格式设计示例,包含4013字节的数据包结构;3) 使用LZ4压缩算法优化传输效率,压缩比可达100:1;4) 接收端解码实现,包含数据解压、校验和图像重组;5) 跨平台兼容性处理,支持Windows和Linux系统。该方案通过压缩大幅降低了网络传输耗时,适用于需要高效传输二进制数据的应用场景。

2025-05-28 15:39:47 1144

原创 Ubuntu虚拟机编译安装部分OpenCV模块方法实现——保姆级教程

目前我们已经下载好了OpenCV,这里以OpenCV4.5.2为例。在内存要求尽可能小的情况下,可以尝试只编译安装代码中使用到的OpenCV模块,以压缩OpenCV占用的内存容量,但是由于OpenCV库中很多函数是具备依赖关系的,可能出现编译后缺少某些模块的情况,这里给出一个编译安装部分模块的实现方法。这是编译安装部分模块之后OpenCV占用情况,可以看到共占用内存317.9MB,相比整个编译安装小了一倍多。

2025-04-08 11:00:35 1344

原创 VMware安装Ubuntu虚拟机实现C++OpenCV代码在虚拟机下运行教程

设置C++标准 set(CMAKE_CXX_STANDARD 20) # 使用C++20 set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制要求编译器支持 set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器扩展(保持标准行为)使用安装好的VS打开imgProc.hpp、imgProc.cpp、Host.cpp文件,将代码写入并保存,这个过程和Windows系统下在VS写代码的过程是一样的。这里我下载的是20.04LTS版本,对应。

2025-04-02 16:32:51 1114

原创 OpenCV三维解算常用方法C++

函数的作用是将像素坐标转换为归一化相机坐标(normalized camera coordinates)。进行计算,这是一个标准的立体视觉技术,用于通过两个相机视角中的匹配点估算其三维坐标。归一化后的坐标,它们不再依赖于摄像机的焦距和像素比例,因此可以用于三角测量。通过 X′=X/W,Y′=Y/W,Z′=Z/W 得到真实的三维坐标。计算三维点的位置时,假设输入的点是在无畸变的相机坐标系下。,那么投影矩阵可以简化为 P=[R∣T](去除了相机内参)。这里的 (xc,yc) 是归一化相机坐标,表示。

2025-03-25 11:00:02 836

原创 双目系统求坐标系A到坐标系B的旋转矩阵和平移向量——C++代码实现

双目系统求解一个坐标系到另外一个坐标系的 R 和 T 最常用的方法是基于,这个方法在计算机视觉和 3D 配准中被广泛使用,也称为。需要有两个坐标系测量的点,至少有3组对应点(能够组成一个平面的点,即不是一条直线上的点),通过这几组对应点来求解旋转矩阵和平移矩阵。首先,计算和中点集的质心(中心点):然后,将点集转换为计算到的。

2025-03-04 17:28:45 676

原创 双目视觉三角测量C++代码实现&不使用OpenCV

这种方法的核心在于利用摄像机的内参和相对位姿(由旋转矩阵和平移向量描述),将图像中的像素坐标转换为三维空间中的射线,并通过求解这些射线的交点来确定物体的空间位置。其中,Pl[2, :] 表示投影矩阵Pl的第三行,而Pl[0, :]表示Pl的第一行,Pr[2, :]和Pr[1, :]分别表示矩阵Pr的第三行和第一行,X是需要解的三维点的齐次坐标。表示左相机在世界坐标系中的位置,这里以左相机为参考坐标系,R是右相机相对于左相机的旋转矩阵,T是右相机相对于左相机的平移向量。首先,左相机的投影矩阵Pl为。

2025-02-11 14:47:01 1121

原创 双线性插值——C语言代码

双线性插值是一种图像处理中的常用方法,用于在二维平面上根据邻近像素的值来估计目标像素的值。对于像素坐标的求解,为了使坐标计算的更准确,通常会采用插值的方式使边缘细化,同时避免锯齿状边缘。经过插值后可以生成介于原始像素值之间的平滑过渡,增强图像细节,使得边界更柔和,坐标更连续,减少锯齿效应。细分的倍数由新图像的尺寸决定。

2024-11-14 15:03:52 701

原创 彩色圆形检测函数不使用OpenCV——C语言代码

代码进行了几次修正,需要注意的是BMP图像是以左上角为原点,以向右为x轴正方向,向下为y轴正方向。在求解中心点坐标时需要注意。软件打开图像查看黄色矩形中心点像素坐标以检验检测结果。

2024-10-30 14:10:53 571 2

原创 彩色矩形检测函数不使用OpenCV——C语言代码

代码进行了几次修正,需要注意的是BMP图像是以左上角为原点,以向右为x轴正方向,向下为y轴正方向。在求解中心点坐标时需要注意。软件打开图像查看黄色矩形中心点像素坐标以检验检测结果。

2024-10-30 13:58:39 304

原创 双目视觉三角测量C语言代码实现&不使用OpenCV

在双目视觉系统中,三角测量是一种基于几何原理的三维重建技术,通过分析同一场景在两个不同视角下的二维图像来确定物体的三维坐标。这种方法的在于利用摄像机的内参和相对位姿(由旋转矩阵和平移向量描述),将图像中的像素坐标转换为三维空间中的射线,并通过求解这些射线的交点来确定物体的空间位置。代码方面,利用相机内参和对极几何关系,从二维像素坐标(u, v)解算出三维世界坐标(X, Y, Z)。通过相机内参矩阵,二维图像点被转换为相机坐标系下的射线。

2024-10-24 10:27:59 589

原创 C4996‘sprintf‘: This function or variable may be unsafe. Consider using sprintf_s instead.

将 sprintf 改为 sprintf_s,需要注意函数的结构也要修改,sprintf_s需要添加参数 sizeof(xxx)。是否添加 #define _CRT_SECURE_NO_WARNINGS 对代码报错无影响。还有一种解决方法是在文件头中添加。是否添加 #define _CRT_SECURE_NO_WARNINGS 对代码报错无影响。还有一种解决方法是在文件头中添加。将 fscanf 改为 fscanf_s。

2024-10-23 10:48:30 815

原创 OpenCV双目视觉三角测量代码实现C++

在双目视觉系统中,,通过分析同一场景在两个不同视角下的二维图像来确定物体的三维坐标。这种方法的核心在于利用摄像机的内参和相对位姿(由旋转矩阵和平移向量描述),将图像中的像素坐标转换为三维空间中的射线,并通过求解这些射线的交点来确定物体的空间位置。

2024-10-22 13:50:59 1508

原创 OpenCV双目相机外参标定C++

库实现双目测量系统外参标定过程。通过分析双目测量系统左右相机拍摄的棋盘格标定板图像,包括角点检测、立体标定、立体校正和畸变校正的步骤,获取左右相机的相对位置关系和姿态。检测每张图像中的棋盘格角点,并进行亚像素级精确化;根据左右相机的角点坐标、三维坐标、内参矩阵和畸变系数,计算旋转矩阵。输出为双目测量系统的标定结果,包括旋转矩阵、平移向量、投影矩阵和重投影矩阵,并通过。,利用最小二乘法最小化重投影误差;根据标定结果对图像进行畸变。展示校正后的图像和视差图,以评估标定质量。

2024-10-22 11:29:06 1332

原创 OpenCV单目相机内参标定C++

地,使用库函数检测两组图像(左右相机拍摄图像)中棋盘格的角点;对检测到的角点进行亚像素级别的精确化,以提高角点位置的准确性;根据左右相机拍摄的棋盘格图像及角点位置,计算出两个相机的内参矩阵及畸变系数;生成畸变校正和图像校正的映射表。是左右相机的内参矩阵和畸变系数,以及每幅图像的旋转向量和平移向量,最后计算并输出标定结果的总体平均误差,以评估标定过程的准确性。通过角点检测、亚像素角点定位、角点存储与三维坐标生成和摄像机标定分别获取左右相机的内参。

2024-10-22 10:49:00 813

原创 OpenCV未定义标识符CV_XXX

如果代码是基于旧版本的OpenCV编写的,而环境中安装的是一个更新的版本,可能会导致一些标识符被重命名或移除,导致不匹配情况。报错“未定义标识符CV_XXX”,即编译器找不到常量。

2024-10-22 10:11:41 559

原创 彩色椭圆及矩形检测函数不使用OpenCV——C语言代码实现

代码功能:基于颜色阈值检测图像中的椭圆或圆形,并输出椭圆或圆形的中心点坐标。代码不使用OpenCV,通过遍历像素实现。可以通过如下生成椭圆图像的代码来验证上述代码的功能。

2024-10-18 14:52:57 485

原创 生成包含彩色椭圆图像——C语言代码实现

示例代码生成1920*1080大小的.bmp彩色图像,图像中包含一个红色。椭圆的位置,大小,颜色可以根据需要修改。圆的位置,大小,颜色可以根据需要修改。,图像背景颜色为黑色。

2024-10-18 14:44:27 292

原创 Pycharm连接AutoDL服务器 文件上传 启动终端

租用新实例。

2024-10-10 16:38:17 613

原创 Unity3D相关知识点总结

Unity3D使用的是,并且是以左手坐标系进行展示的。全局坐标系描述的是游戏对象在整个世界(场景)中的相对于坐标原点(0,0,0)的位置。我们在场景中创建一个cube,初始的position值为(0,0,0),表示它当前在原点位置,如果我们设置它的position属性值为(1,2,3),则此时表示,cube相对于世界原点在x轴上偏移了1个单位,在y轴上偏移了2单位,在z轴上偏移了3个单位(注:unity中单位为米,即每单位为1米)。场景中的游戏对象都有属于自己的独立坐标系,也称为。

2024-10-10 16:36:11 1274

原创 TCP数据传输——C++代码实现

以坐标数据为例,通过TCP协议向同一局域网下指定计算机传输数据。C++代码实现。

2024-10-10 16:06:54 1080

原创 生成靶标图像代码——C语言代码实现

每张图像中包含两个靶标,第一组左右相机拍摄的图像包含靶标1和2,第二组包含靶标3和4。同时输出生成靶标的位置。两个相机在x轴方向上平移。

2024-09-30 15:43:12 557

原创 两帧BMP图像差分处理——C语言代码实现

第2中方法是根据既定的阈值进行二值化处理,下面这种方法是自适应阈值处理。以用时最短为目标,不进行灰度化等其他处理步骤。

2024-09-30 15:18:37 615

原创 Mimics21软件学习总结

(1)安装完成后先不要运行软件,找到安装目录下LicSrvConfig.exe,管理员身份运行后,点stop,默认路径在:C:\Program Files (x86)\Common Files\Materialise\LicenseFiles6,成功关闭后,关闭LicSrvConfig.exe窗口。⑥ 选择第一项“custom”(自定义),再选择安装位置,默认路径为“C:\Program Files\Materialise\”,随后点击“next”;(9)点击register注册按钮,提示成功,点确定。

2024-04-23 19:51:34 2256

原创 面经——面试中常问到的计算机网络相关问题

响应包括状态码(表示请求成功、失败或其他状态)、响应头(包含有关响应的信息)和实际的响应体(包含请求的数据或HTML内容等)。渲染完页面后,浏览器和服务器之间的TCP连接可能会被关闭,除非使用了持久连接(HTTP keep-alive)来保持连接以供未来使用。总的来说,HTTPS是HTTP的安全版本,通过使用加密和认证技术,提供了更高级别的数据安全性,尤其在涉及用户敏感信息的网站上更为重要。HTTPS还涉及到服务器的身份验证,以确保用户连接到的是正确的服务器,防止中间人攻击。

2024-01-29 11:37:10 1276 1

原创 Python八股文总结

lambda函数是一种匿名函数,通常用于简化代码,特别是在函数参数中传递简单的功能。

2024-01-15 12:15:48 15195 6

原创 Python数据类型转换

数据类型的不一致可能导致分析错误,因此在数据清洗中通常需要对数据类型进行转换。

2024-01-08 15:22:31 935

原创 关于简单的数据可视化

安装数据可视化必要的openpyxl、pandas,matplotlib等软件包,对Excel进行数据可视化操作。

2024-01-02 17:28:21 923

原创 关于运维工作和Linux的理解

他们的工作涵盖了广泛的领域,旨在确保系统的高可用性、性能和安全性。1. 系统监控和故障排除:监视服务器和网络,及时发现并解决潜在的问题,确保系统的正常运行。总体而言,Linux在运维中的作用是提供一个可靠、高性能、安全和可定制的操作系统环境,支持各种应用和服务的稳定运行。8. 自动化和脚本:Linux系统支持丰富的命令行工具和脚本语言,如Bash、Python等,用于自动化运维任务。7. 安全性和权限管理:Linux系统具有强大的安全性和权限管理机制,运维人员可以通过用户和权限设置来控制对系统资源的访问。

2023-12-04 15:55:58 1063 1

原创 数据结构知识点总结

图的存储使用:①邻接矩阵:二维矩阵,如A[i][j]=n(权值)或者A[i][j]=0/1,无线图的邻接矩阵是对称矩阵。①自底向上堆化:会产生“气泡”浪费存储空间,用于插入元素,即先将元素放至数组末尾,上浮。堆的插入和删除效率高,时间复杂度是O(logn),初始化的时间复杂度是O(n)。递归,排序,二分查找,搜索,哈希算法,分治算法,动态规划,字符串匹配算法等。②自顶向下堆化:用于删除堆顶元素,将末尾元素放至堆顶,再向下堆化,下沉。数组,栈,队列,链表,散列表,二叉树,堆,跳表,图,树。

2023-10-17 11:09:42 565

转载 Python使用库函数对列表数据进行排序

例如,如果我们有一个列表需要根据其中的元素进行排序,可以使用以下代码:运行结果为:这里使用的lambda函数表示按照元组中的第一个元素进行排序。再如:运行结果为[1, 2, 3, 6, 7, 90]。

2023-10-14 17:18:28 770

原创 SQL及数据库基础知识点总结

truncate和drop是DDL 语句,也就是 Data Definition Language 数据定义语言,它是用来维护存储数据的结构指令,所以这点也是和 delete 命令是不同的,delete 语句属于 DML,Data Manipulation Language 数据操纵语言,用来对数据进行操作的。合并2个/多个select语句的结果,union内部的每个select语句必须拥有相同数量的列,且列拥有相似的数据结构,union结果集中的列名同union中第一个select语句中的列名。

2023-10-14 10:33:37 676

计算机系统结构-第一章.docx

包含我对计算机系统结构的总结,主要是第一章的内容,包括计算机的透明性,计算机系统结构的三种分类方法,及相关计算公式和典型例题等......

2020-02-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除