<span style="font-family:Microsoft YaHei;font-size:14px;">#include <cmath>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;const int kvalue = 15;//双边滤波邻域大小int main()
{Mat src_color = imread("1.png");//读取原彩色图imshow("原图-彩色", src_color);//声明一个三通道图像,像素值全为0,用来将霍夫变换检测出的圆画在上面Mat dst(src_color.size(), src_color.type());dst = Scalar::all(0);Mat src_gray;//彩色图像转化成灰度图cvtColor(src_color, src_gray, COLOR_BGR2GRAY);imshow("原图-灰度", src_gray);imwrite("src_gray.png", src_gray);Mat bf;//对灰度图像进行双边滤波bilateralFilter(src_gray, bf, kvalue, kvalue*2, kvalue/2);imshow("灰度双边滤波处理", bf);imwrite("src_bf.png", bf);vector<Vec3f> circles;//声明一个向量,保存检测出的圆的圆心坐标和半径HoughCircles(bf, circles, CV_HOUGH_GRADIENT, 1.5, 20, 130, 38, 10, 50);//霍夫变换检测圆std::vector<int> v;//保存圆心的横坐标减纵坐标的绝对值,用于区分两排灯cout << "x=\ty=\tr=" << endl;for(size_t i = 0; i < circles.size(); i++)//把霍夫变换检测出的圆画出来{Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);circle( dst, center, 1, Scalar(0, 255, 0), -1, 8, 0 );//画出圆心,颜色为绿色circle( dst, center, radius, Scalar(0, 0, 255), 1, 8, 0 );//画出圆的轮廓,颜色为红色v.push_back(abs(center.x-center.y));//存储圆心的横坐标减纵坐标的绝对值,用于区分两排灯cout << center.x << "\t" << center.y << "\t" << radius << endl;//在控制台输出圆心坐标和半径  }sort(v.begin(), v.end());//从小到大排序std::vector<Point> points1, points2;//声明点向量,分别存储两排灯的圆心坐标for (size_t i = 0; i < circles.size(); i++)//用来区分两排灯{Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));if (abs(center.x-center.y) < v[12])points1.push_back(Point(center.x, center.y));//存储从左上到右下那排灯的圆心坐标elsepoints2.push_back(Point(center.x, center.y));//存储从左下到右上那排灯的圆心坐标}cv::Vec4f line1, line2;//拟合直线fitLine(Mat(points1), line1, CV_DIST_L2, 0, 0.01, 0.01);fitLine(Mat(points2), line2, CV_DIST_L2, 0, 0.01, 0.01);int x01 = (int)line1[2];int y01 = (int)line1[3];int x11 = (int)(x01 + 300*line1[0]);int y11 = (int)(y01 + 300*line1[1]);int x21 = (int)(x01 - 300*line1[0]);int y21 = (int)(y01 - 300*line1[1]);   int x02 = (int)line2[2];int y02 = (int)line2[3];int x12 = (int)(x02 + 300*line2[0]);int y12 = (int)(y02 + 300*line2[1]);int x22 = (int)(x02 - 300*line2[0]);int y22 = (int)(y02 - 300*line2[1]);    cv::line(dst, Point(x11, y11), Point(x21, y21), Scalar(255, 255, 255), 1);//画出直线cv::line(dst, Point(x12, y12), Point(x22, y22), Scalar(255, 255, 255), 1);imshow("特征提取", dst);imwrite("dst.png", dst);waitKey();
}</span>

原图:

效果图:

霍夫变换提取圆心坐标,并拟合直线相关推荐

  1. html圆形圆心坐标,halcon找圆心坐标(拟合圆算子详解)

    Contours(in):输入轮廓 Algorithm(in):拟合圆的算法 MaxNumPoints(in):用于计算的最大轮廓点个数 MaxClosureDist(in):一个轮廓的末尾点最大间距 ...

  2. halcon gen_region_hline 绘制霍夫变换提取直线

    目录 gen_region_hline(算子) 描述 gen_region_hline(算子) gen_region_hline - 将霍夫变换提取直线以普通形式描述的输入行存储为区域. gen_re ...

  3. html5圆心坐标,圆心坐标的提取

    用OpenCV的话,这样的活儿也就那么两三行代码,而且灵活可靠.但是,玩图像处理只懂玩成这样就悲哀了,就如同游戏引擎之于计算机图形学,太依赖图像库是不利于自己的成长和知识的提升的~--ZwqXin.c ...

  4. 拟合三点共圆 圆心坐标和半径

    原文链接: 拟合三点共圆 圆心坐标和半径 上一篇: mobilenet_v2_1.4_224 flowers 数据集分类网络 下一篇: 简单 gan 生成手写数字 均方误差 任意给定三个点,找到经过三 ...

  5. 3D激光点云霍夫变换拟合直线

    激光点云霍夫变换拟合直线 霍夫变换的原理 霍夫变换在3D点云中的实践 霍夫变换的原理 笛卡尔坐标系下,直线方程为y=kx+b.现在我们对该直线方程变形后有 b=-kx+y,这时我们不再把k.b看作是系 ...

  6. OpenCV实战系列——拟合直线

    OpenCV实战--拟合直线 0. 前言 1. 直线拟合 2. 完整代码 相关链接 0. 前言 在某些计算机视觉应用中,不仅要检测图像中的线条,还要准确估计线条的位置和方向.本节将介绍如何找到最适合给 ...

  7. python椭圆拟合_opencv python 轮廓特征/凸包/外接矩形/外接圆/拟合矩形/拟合直线/拟合圆...

    Contour Features 1 图像的矩 cv2.moments() 图像的矩可以帮助计算物体的某些特征,如对象的质心,对象的区域等. 代码: import cv2 import numpy a ...

  8. OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合

    1 图像的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓是图像目标的外部特征,这种特征对于我们进行图像分析,目标识别和理解等更深层次的处理都有很重要的意义. ...

  9. OpenCV实战——拟合直线

    OpenCV实战--拟合直线 0. 前言 1. 直线拟合 2. 完整代码 相关链接 0. 前言 在某些计算机视觉应用中,不仅要检测图像中的线条,还要准确估计线条的位置和方向.本节将介绍如何找到最适合给 ...

  10. halcon已知多点拟合圆_Halcon拟合圆spoke、拟合直线算子rake 用于测量 【开源版下载】...

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力! 您需要 登录 才可以下载或查看,没有帐号?会员注册 x 原826工作室鸟叔真情奉献 Halcon拟合圆Spoke.拟合直 ...

最新文章

  1. 解压与压缩(把dataset转为string、、 )
  2. 让VS2010添加新类时自动添加public关键字(来自dudu博文)
  3. Java StreamTokenizer quoteChar()方法与示例
  4. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划
  5. MS17-010 “永恒之蓝“ 修复方案
  6. Vue3核心概念、新特性及与Vue2的区别
  7. 蜡染印花的跟踪印花与二次整纬
  8. input 限制只能输入数字,且保留小数后两位
  9. java图片转为矢量文件_java 通过batik 把svg格式的矢量图生成png图片
  10. 计算机研究计划怎么写,课题研究计划书范文
  11. Linux的DNS深度学习(DNS服务器搭建)
  12. 实体消歧(链接到实体库)
  13. 2022.10.3-10.8 AI行业周刊(第118期):AI训练营
  14. 阿尔法贝塔阀原理_阿尔法跟贝塔以及夏普讲的最通俗的
  15. android颜色透明度换算详解
  16. Xcode 10.1 安装模拟器无反应:点击create 无反应
  17. 不知如何走的立交桥(西直门交警一文背景)
  18. github snap android,轻量级的viewpager指示器
  19. 科研绘图(编程绘图、网站绘图、配色、素材、提取数...)
  20. ECharts 实现世界地图

热门文章

  1. JAVA实现PDF合并、拆分代码工具类
  2. 数据看板是什么,怎么做?
  3. ipa文件缓存服务器,ipa文件包获取服务器地址
  4. pdfbox pdf转图片中的字体问题
  5. 发送短信工具类(亿美短信平台接口)
  6. c语言音乐程序天空之城,51单片机演奏天空之城 c语言源程序
  7. #1005. 三个小朋友分糖果
  8. DM7在linux下部署
  9. 盘点愚人节各大网站彩蛋,谁最爱恶搞?
  10. 工业级高精度电磁流量计解决方案