OpenCV4 目标物体矫正过程中拟合椭圆和霍夫圆效果区别
作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
目录
背景:
思路:
代码:
背景:
目标物体固定大小,目标中包含圆形轮廓以及直线边缘,想将目标摆正角度并且x、y方向平移至固定位置。
(倾斜并且不在规定位置的目标图)
思路:
需要将固定大小的目标物体先矫正角度(利用关键边缘线进行霍夫线变换后计算角度,然后仿射变换矫正角度),然后想通过找到圆心确定需要x、y方向平移的幅度。
找圆心第一个想到的是霍夫圆变换 HoughCircles(),但是发现找到的圆和圆心不太准确。
后来尝试了轮廓的椭圆拟合 fitEllipse() ,发现效果比较好,如下图。
代码:
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
//只输出最顶层轮廓 baseCny是canny边缘检测后的Mat
findContours(baseCny, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);for (int i = 0; i < contours.size(); i++)
{RotatedRect ellipse_rect = fitEllipse(contours[i]);//获取椭圆的长轴和短轴长度(外接矩形的长和宽)int w = ellipse_rect.size.width;int h = ellipse_rect.size.height;//椭圆的中心坐标Point center = ellipse_rect.center;//绘制拟合椭圆ellipse(imgEnd, ellipse_rect, Scalar(0, 0, 255), 1, 8);
}
/*// 找到扁形工件的左上角圆,然后比较模板中的位置,确定仿射变换的值
vector<Vec3f> unknownSurfaceCircles;
cv::HoughCircles(baseCny, unknownSurfaceCircles, HOUGH_GRADIENT, 1, 80, 100, 15, 10, 15);
if (unknownSurfaceCircles.size() < 1) {cout << "图片中没有找到圆" << endl;
}
//在原图中画出圆心和圆
for (size_t i = 0; i < unknownSurfaceCircles.size(); i++)
{//提取出圆心坐标Point center(cvRound(unknownSurfaceCircles[i][0]), cvRound(unknownSurfaceCircles[i][1]));//提取出圆半径int radius = cvRound(unknownSurfaceCircles[i][2]);//圆心circle(imgEnd, center, 3, Scalar(0, 255, 0), -1, 8, 0);//圆circle(imgEnd, center, radius, Scalar(0, 0, 255), 1, 8, 0);
}*/
【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】
OpenCV4 目标物体矫正过程中拟合椭圆和霍夫圆效果区别相关推荐
- [机器学习] 训练过程中的train,val,test的区别
转自:Caffe训练过程中的train,val,test的区别. 训练过程中的train,val,test的区别 val是validation的简称. training dataset和validat ...
- python椭圆函数_python数字图像处理(16):霍夫圆和椭圆变换
在极坐标中,圆的表示方式为: x=x0+rcosθ y=y0+rsinθ 圆心为(x0,y0),r为半径,θ为旋转度数,值范围为0-359 如果给定圆心点和半径,则其它点是否在圆上,我们就能检测出来了 ...
- python椭圆代码_Python实现霍夫圆和椭圆变换代码详解
这篇文章主要介绍了Python实现霍夫圆和椭圆变换代码详解,具有一定借鉴价值,需要的朋友可以参考下 在极坐标中,圆的表示方式为: x=x0 rcosθ y=y0 rsinθ 圆心为(x0,y0),r为 ...
- OpenCV中霍夫圆检测
OpenCV中霍夫圆检测 在直线检测中,变换后在r−θr-\thetar−θ空间内曲线交点,然后根据阈值来得到直线.在圆中需要有三个变量圆心坐标和半径,因此变换后的空间在三维空间,根据三维空间中的曲线 ...
- 计算机视觉课程第四讲-OpenCV4钢管检测项目下集:霍夫圆检测理论与实践
计算机视觉课程第四讲-OpenCV4钢管检测项目下集:霍夫圆检测理论与实践 本专栏将会带大家学习 <计算机视觉与图形学> 相关知识,从传统图像处理方法到最新的神经网络方法!!! 下载上面安 ...
- 训练过程中的train,val,test的区别
train是训练集,val是训练过程中的测试集,是为了让你在边训练边看到训练的结果,及时判断学习状态.test就是训练模型结束后,用于评价模型结果的测试集.只有train就可以训练,val不是必须的 ...
- 转 PHP编程过程中需要了解的this,self,parent的区别
{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object Oriented Programming)现已经成为编程人员的一项基本技能.利用OOP的思想进行 ...
- 公路施工过程中对于路缘石滑模机作业流程的解析
在通过公路建设项目进行了统计和调查,发现目前机械设备的投入力度有了很大的加强,在对于滑模作业方面提供了快捷可靠的作业方式和美观稳固的质量交付,工程整体效率和质量有了非一般的突破,来对于路缘石滑模机等设 ...
- 《炬丰科技-半导体工艺》 硅蚀刻及其在太阳能电池制造过程中的应用
书籍:<华林科纳-半导体工艺> 文章:硅蚀刻及其在太阳能电池制造过程中的应用 编号:JFKJ-21-1108 作者:华林科纳 引言 随着对世界能源环境问题的关注增加,对可再生能源太阳能发电 ...
最新文章
- 超级账本(Hyperledger Fabric)源码分析之一:总览
- 如何确定最佳训练数据集规模?6 大必备“锦囊”全给你了
- “AI独角兽”半年巨亏52亿 旷视科技的IPO之路会好走吗?
- PowerShell在Exchange2010下交互式修改群组审批人和免审批邮箱
- 基于Docker搭建GitLab代码管理
- 网易数帆Curve加入PolarDB开源数据库社区
- java类型转换 float类型转换_Java类型转换 – float(和long)到int
- Python编写杨辉三角形
- HCIE Datacom考试-MAC 地址基础及漂移技术汇总!
- lxr-0.3.1 源码阅读 How To.
- 2021/8/12 网络机顶盒
- SOLIDWORKS Electrical无缝集成电气和机械设计
- bat批量修改文件后缀
- 设计电商网站必看,如何改善用户体验
- [Android]混淆Android代码
- 一款轻量级的markdown编辑器
- cgb2110-day13
- 数据中心网络带宽线速有门道
- 仿小米官网登录功能的实现
- 敢达java_Java程序员均薪高达19015元,你又拖后腿了吗?