OpenCV中如何 三行代码实现卡尺功能

科技   2024-10-16 23:25   江苏  

点击上方蓝字关注我们

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

用OpenCV模仿Halcon卡尺功能,实现了一个直线寻边卡尺!蓝色的点就是寻边得到的结果,主要步骤分为:

1. 根据输入线段与其它参数 获取等分点 2. 获取等分点的垂直于线段的矩形ROI 3. 旋转至水平 4. 直接高斯模糊,然后计算X方向投影,计算每一列的像素均值 5. 计算一阶导数(梯度),找到最大梯度(正/负)对应点坐标 6. 最大梯度坐标反向旋转回去,得到蓝色点就是最终寻边得到 7. 拟合成直线或者线段,输出即可!

============================= 看我做的效果如何,还行吗?圆的寻边卡尺原理与步骤类似~~~~


QT5集成工作流引擎

下载工作流引擎SDK开发包
https://appetjpz4tj8166.h5.xiaoeknow.com/p/course/ecourse/course_2XtK2sEi7HNUwt2WscP6tFwxpIb
 QT5中导入OpenCV工作流引擎支持配置如下:


集成运行的界面实现如下:

支持鼠标选择,完成以后自动显示卡尺,其中蓝色的点为寻边得到的结果。
集成的SDK代码如下,只需要三行代码调用,即可实现OpenCV卡尺功能,简单方便,支持圆与直线卡尺,通过配置文件实现各种参数设置:
std::shared_ptr<QTongCoreCVWorkFlow> engine(new QTongCoreCVWorkFlow());bool succ = engine->initWorkFlow("D:/qtong_caliper.vm", "38735ef8da3a49d5d17d882462bf515b");if (!succ) {  std::cout << "Could not load workflow file here..." << std::endl;  return;}QString fileName("OpenCV学堂");cv::Mat frame = cv::imread(this->image_data_path->text().toStdString());cv::Vec4i line;canvas->get_line(line);cv::Mat result;std::vector<std::string> logs;engine->run_measure(frame, result, line);
运行结果如下


OpenCV4系统化学习


深度学习系统化学习

推荐阅读

OpenCV4.8+YOLOv8对象检测C++推理演示

ZXING+OpenCV打造开源条码检测应用

攻略 | 学习深度学习只需要三个月的好方法

三行代码实现 TensorRT8.6 C++ 深度学习模型部署

实战 | YOLOv8+OpenCV 实现DM码定位检测与解析

对象检测边界框损失 – 从IOU到ProbIOU

初学者必看 | 学习深度学习的五个误区



OpenCV学堂
三本书《Java数字图像处理-编程技巧与应用实践》、《OpenCV Android开发实战》、《OpenCV4应用开发-入门、进阶与工程化实践》作者。OpenCV实验大师平台 软件作者,OpenCV开发专家、OpenCV研习社创始人。
 最新文章