<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HJQD777的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/HJQD777</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HJQD777]]></copyright><item><title><![CDATA[标定系数为什么会存储在相机模组里面，在标定的时候，算法是在割草机的X3板上运行的啊？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153752741</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153752741</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 22:51:29 +0800</pubDate><description><![CDATA[算法虽然在X3板上运行，但计算出的结果（相机的固定参数）被“下沉”存储到了相机模组本身。这是一种着眼于系统维护、可靠性和模块化设计的工程策略，它让相机成为一个智能的、自带“身份证”的模块，而不是一个“傻”的传感器。]]></description><category></category></item><item><title><![CDATA[相机模组，模组是什么意思？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153752711</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153752711</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 22:50:05 +0800</pubDate><description><![CDATA[模组是一个为了专业化分工、便于集成和标准化而设计的功能性硬件单元。它让复杂的系统设计变得像“搭积木”一样简单、高效和可靠。相机模组就是其中一个非常典型的代表。]]></description><category></category></item><item><title><![CDATA[标定参数从相机模组读出来]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153752679</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153752679</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 22:48:31 +0800</pubDate><description><![CDATA[由于相机硬件模组的存储空间有限，无法保存每次标定时得到的、从相机到标定板的临时外参矩阵。因此，系统采用了一种折中方案：只永久性地存储一个从相机坐标系到一个固定的“Front”参考坐标系的外参。这个固定的外参是在初始设置（例如通过扫描一个固定位置的二维码）时确定的。在后续应用中，所有其他与外参相关的计算，都可以以这个固定的“Front”坐标系为桥梁来间接完成。节省内存：只需要存储一个固定的矩阵。统一基准。]]></description><category></category></item><item><title><![CDATA[标志位写成int 类型的 0，1 好些，还是bool类型的true false好些？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153728416</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153728416</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 11:27:02 +0800</pubDate><description><![CDATA[bool。]]></description><category></category></item><item><title><![CDATA[代码里使用很多的if else和代码里面使用标志位，来判定是否进入下一个逻辑。这俩种方式的比较？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153727873</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153727873</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 11:15:04 +0800</pubDate><description><![CDATA[这两种代码组织方式各有优缺点，下面是详细的比较：
if(!use_percept){
    // 逻辑1
} else {
    if(条件1 || 条件2 || ...) {
        // 逻辑2
    } else {
        if(image.empty()) {
            // 逻辑3
        } else {
            Rect roiRect(topLeft, bottomRight);
            Mat roi = ima]]></description><category></category></item><item><title><![CDATA[初始化和不初始化对内存有什么影响？什么情况下使用什么比较好？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153724399</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153724399</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 10:08:12 +0800</pubDate><description><![CDATA[场景推荐方案原因固定4个角点安全、高效、直接访问角点数量可变reserve()灵活性好，避免浪费性能敏感预分配固定大小避免运行时内存分配在您的场景中（明确需要4个角点），推荐使用初始化方式，因为：代码更安全（避免越界）性能更好（无运行时扩容）意图更清晰（明确需要4个点）]]></description><category></category></item><item><title><![CDATA[if (image.channels() == 1){ cv::cvtColor(image, image, cv::COLOR_GRAY2BGR)；}做了什么操作，内存有什么变化？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153723298</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153723298</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 09:47:20 +0800</pubDate><description><![CDATA[功能：将单通道灰度图转换为3通道BGR图（每个通道值相同）内存内存占用增加200%（从1通道变为3通道）特点：原地操作，会重新分配内存并释放原内存用途：为后续的彩色绘图或处理做准备。]]></description><category></category></item><item><title><![CDATA[image.copyTo(image_show)；和image_show=image.clone()的区别，内存的变化]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153721465</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153721465</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 09:15:47 +0800</pubDate><description><![CDATA[内存变化总结copyTo：智能内存管理，尽可能复用目标内存clone：总是创建新内存，更安全但性能较低推荐：在性能敏感的场景使用copyTo，在需要明确表达创建独立副本时使用clone。copyTo 的内存操作：text1. 检查 image_show 是否可复用（尺寸、类型匹配）2. 如果可复用：直接内存拷贝 → 高效3. 如果不可复用：分配新内存 → 拷贝数据 中的内存拷贝是什么意思？"内存拷贝" 指的是将数据从一块内存区域复制到另一块内存区域的操作。"内存拷贝" 在copyTo。]]></description><category></category></item><item><title><![CDATA[cv::Matx33d intrinsic_matrix Matx33d 中的x是什么意思？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153693479</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153693479</guid><author>HJQD777</author><pubDate>Wed, 22 Oct 2025 09:13:14 +0800</pubDate><description><![CDATA[在 OpenCV 中，Matx33d中的 x表示这是一个。Matx。]]></description><category></category></item><item><title><![CDATA[cv::cvtColor(roi, gray, cv::COLOR_BGR2GRAY)； cvtColor作的操作是什么？在内存方面的影响是什么？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153692420</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153692420</guid><author>HJQD777</author><pubDate>Tue, 21 Oct 2025 16:32:50 +0800</pubDate><description><![CDATA[执行的是颜色空间转换为输出图像分配新的独立内存内存占用减少约 66.7%（从3通道变为1通道）保证输入输出数据的完全独立这是一种既安全又内存高效的处理方式。resize做了什么操作，对内存的影响cv::resize执行的是图像缩放为输出图像分配新的独立内存内存占用按缩放因子的平方减少（factor²）保证输入输出数据的完全独立与 cvtColor 结合使用可大幅降低总内存占用这是一种既安全又能显著优化内存使用的处理方式。]]></description><category></category></item><item><title><![CDATA[ gray = roi.clone()；和gray = roi；的区别是什么？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153691854</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153691854</guid><author>HJQD777</author><pubDate>Tue, 21 Oct 2025 16:03:39 +0800</pubDate><description><![CDATA[if (roi.channels() == 1) { // 如果已经是灰度图，直接使用 std::cout << "Image is already grayscale, using directly" << std::endl;// 或者直接使用 image } 和 gray = roi;的区别是什么？这两行代码有重要的区别，主要体现在：在内存中创建一份全新的、独立的数据副本gray和roi使用不同的内存空间：修改gray不会影响roi，修改roi也不会影响gray。]]></description><category></category></item><item><title><![CDATA[为什么要使用枚举类？有什么好处？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/153122063</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/153122063</guid><author>HJQD777</author><pubDate>Sun, 12 Oct 2025 16:11:43 +0800</pubDate><description><![CDATA[虽然直接使用 int 看起来更简单，但在实际项目中，枚举类提供的类型安全、更好的可读性、编译时检查和更易于维护的特性，远远超过了初期的编码便利性。特别是对于状态码、错误码、配置选项等，使用枚举类是更好的选择。]]></description><category></category></item><item><title><![CDATA[定理是什么？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/152898513</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/152898513</guid><author>HJQD777</author><pubDate>Fri, 10 Oct 2025 10:08:26 +0800</pubDate><description><![CDATA[公理是深埋于地下的地基，我们无条件地接受它们。定义是建造大厦所用的砖块的规格说明。定理则是用这些砖块，按照严格的建筑规范（逻辑推理），一层一层建造起来的坚固结构（如墙壁、楼层、房间）。引理可能是搭建脚手架时用的小部件。推论是建好一面主墙后，自然而然出现的一个小壁龛。因此，定理是数学知识的骨干，是那些我们确信为真、并可以作为进一步探索和发现基础的核心真理。]]></description><category></category></item><item><title><![CDATA[程序的规范？一个优美的c++工程代码是什么样的？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/152256089</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/152256089</guid><author>HJQD777</author><pubDate>Mon, 29 Sep 2025 10:16:13 +0800</pubDate><description><![CDATA[我们通常从以下几个方面来评价一个C++工程代码的优美程度：代码结构清晰，模块化设计良好。遵循一致的命名规范。适当的注释，既不过多也不过少，注释应该解释为什么（why）而不是什么（what）。遵循面向对象的设计原则（如SOLID原则）或泛型编程原则。使用适当的设计模式，但不要过度设计。错误处理机制完善。代码可读性高，易于维护和扩展。使用版本控制，并有清晰的提交信息。有完整的文档（如README、API文档等）。有自动化构建和测试。下面通过一个简单的例子来展示一个优美的C++代码片段。]]></description><category></category></item><item><title><![CDATA[在当前分支中，进行了修改，如果没有git add git commit 的话，切换到其他分支，当前修改是不是不会保存？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/152118401</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/152118401</guid><author>HJQD777</author><pubDate>Fri, 26 Sep 2025 10:39:16 +0800</pubDate><description><![CDATA[如果在当前分支进行了修改但没有git add和git commit。]]></description><category></category></item><item><title><![CDATA[一款相机是只有桶形畸变 和 枕形畸变的一种，还是两个都有？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/151956695</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/151956695</guid><author>HJQD777</author><pubDate>Mon, 22 Sep 2025 10:34:44 +0800</pubDate><description><![CDATA[产生主体：畸变源于镜头，而非相机机身。对于变焦镜头：非常常见的情况是同时拥有两种畸变，在广角端呈桶形，在长焦端呈枕形。对于定焦镜头：通常主要表现出一种与其焦段相关的畸变，但高级定焦镜头的畸变控制得很好。最终成像：得益于数码校正技术，无论是相机直出的JPEG还是手机照片，所看到的最终效果通常都是已经过处理、畸变极其轻微甚至完全消除的图像。]]></description><category></category></item><item><title><![CDATA[std::thread cameraThread_； std::thread processingThread_；解释代码]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/149577535</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/149577535</guid><author>HJQD777</author><pubDate>Wed, 23 Jul 2025 17:38:56 +0800</pubDate><description><![CDATA[用于创建和管理线程。和分别用于处理相机捕获和图像处理任务。使用可以实现多线程并发执行，提高程序的效率。在多线程程序中，需要确保线程安全，例如通过使用类型或同步机制（如互斥锁）。]]></description><category></category></item><item><title><![CDATA[我不喜欢尝试新事物，做事情唯唯诺诺。怎么能变得更积极主动进取一些？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/149565897</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/149565897</guid><author>HJQD777</author><pubDate>Wed, 23 Jul 2025 11:28:18 +0800</pubDate><description><![CDATA[将尝试新事物或可能出错的情况视为“学习机会”或“数据收集”，而不是灾难性的失败。每一次“不那么成功”的体验都提供了宝贵的信息，告诉你下次可以如何调整。问自己：“从这次经历中，我学到了什么？]]></description><category></category></item><item><title><![CDATA[我很焦躁。很烦躁。无法静下心工作看论文调试代码。肩胛骨缝发紧。]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/149565866</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/149565866</guid><author>HJQD777</author><pubDate>Wed, 23 Jul 2025 11:27:24 +0800</pubDate><description><![CDATA[嗯……用户此刻正被强烈的焦躁感和身体不适困扰，甚至无法进行日常工作。这种状态我太熟悉了——就像电路过载时发出的嗡鸣声。从ta用“肩胛骨缝发紧”这样精准的描述能看出，ta已经敏锐觉察到情绪在身体的映射。回溯对话历史，用户前几日还在困扰行动力问题，现在突然陷入急性焦虑状态，可能是积累的压力突破了临界点。ta的用词短促重复（“很焦躁。很烦躁。”），像被无形的东西扼住了喉咙。此刻最迫切的不是长期改变方案，而是帮ta从情绪洪流中上岸。需要双管齐下：先处理身体警报，再疏导情绪漩涡。]]></description><category></category></item><item><title><![CDATA[链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。附加的目标文件包括静态连接库和动态连接库。其中的启动文件是什么意思？]]></title><link>https://blog.youkuaiyun.com/HJQD777/article/details/148796911</link><guid>https://blog.youkuaiyun.com/HJQD777/article/details/148796911</guid><author>HJQD777</author><pubDate>Fri, 20 Jun 2025 17:43:07 +0800</pubDate><description><![CDATA[启动文件是编译和链接过程中不可或缺的一部分，它们负责初始化运行时环境、调用全局对象的构造函数和析构函数，以及提供运行时支持。（Startup Files）是一些特殊的文件，它们在程序启动时被加载和执行，用于初始化运行时环境。启动文件负责调用这些构造函数，确保全局对象在程序开始执行之前被正确初始化。在程序退出时，启动文件还会负责调用全局对象的析构函数，确保资源被正确释放。：这是 C 语言的启动文件，负责初始化 C 运行时环境。：这些文件用于初始化和结束全局对象的构造和析构。：负责初始化全局对象的构造。]]></description><category></category></item></channel></rss>