【OpenCV入门教程之十五】Ope" /> 堵博游戏平台_网络编程_python+opencv识别图片中的圆形
网络编程
网络编程
python+opencv识别图片中的圆形
网络编程 2020-01-03 08:32

本文实例为大家分享了python+opencv识别图片中足球的格局,供我们参照他事他说加以侦查,具体内容如下

应用OpenCV霍夫转变检查实验出圆

style="font-size: 16px">【OpenCV入门教程之十五】OpenCV霍夫调换:霍夫线调换,霍夫圆转换合辑

Opencv--HoughCircles源码分析

hough调换搜索圆的幼功知识就蒙蔽了,网络一大推,这里最主要讲应用:
函数原型

先补充下霍夫圆转换的几个参数知识:

  HoughCircles函数能够选择霍夫转变算法检验出灰度图中的圆。它和事情未发生前的HoughLines和HoughLinesP比较刚烈的一个组别是它没有必要源图是二值的,而HoughLines和HoughLinesP都急需源图为二值图像。

#python
circles = HoughCircles( gray_image, cv2.cv.CV_HOUGH_GRADIENT, 1, src_gray.rows/8, 200, 100, 0, 0 )
  • dp,用来检查评定圆心的累计器图像的分辨率于输入图像之比的尾数,且此参数允许创造一个比输入图像分辨率低的累积器。上述文字倒霉精通的话,来看例子吗。比方,要是dp= 1时,累积器和输入图像具备相仿的分辨率。假诺dp=2,累计器便有输入图像50%那么大的上涨的幅度和冲天。
  • minDist,为霍夫转变检查实验到的圆的圆心之间的蝇头间距,即让咱们的算法能分明有别于的多个例外圆之间的一丁点儿间隔。这几个参数假如太小的话,八个相邻的圆只怕被指鹿为马地检验成了四个重合的圆。反之,这些参数设置太大的话,有些圆就不能够被检查评定出来了。
  • python+opencv识别图片中的圆形。param1,有默许值100。它是method设置的检查评定方法的对应的参数。对现阶段唯豆蔻年华的点子霍夫梯度法,它象征传递给canny边缘检查实验算子的高阈值,而低阈值为高阈值的二分一。
  • param2,也会有默许值100。它是method设置的检测方法的照看的参数。对当下唯少年老成的办法霍夫梯度法,它意味着在检测阶段圆心的累计器阈值。它越小的话,就足以检查评定到越多根本不设有的圆,而它越大的话,能透过检查实验的圆就更为临近完美的圆形了。
  • minRadius,暗许值0,表示圆半径的小小值。
  • maxRadius,也会有私下认可值0,表示圆半径的最大值。
1 void HoughCircles(InputArray image,OutputArray circles, int method, double dp, double minDist, double param1=100,double param2=100, int minRadius=0, int maxRadius=0 )  

函数原型:

源代码:

  • 首先个参数,InputArray类型的image,输入图像,即源图像,需为8位的灰度单通道图像。
  • 其次个参数,InputArray类型的circles,经过调用HoughCircles函数后此参数存款和储蓄了检查实验到的圆的出口矢量,每一个矢量由包罗了3个要素的浮点矢量(x, y, radiusState of Qatar表示。
  • 其八个参数,int类型的method,即利用的检验方法,前段时间OpenCV中就霍夫梯度法风华正茂种可以接纳,它的标记符为CV_HOUGH_GRADIENT,在这里参数处填那几个标志符就可以。
  • 第多个参数,double类型的dp,用来检查实验圆心的累积器图像的分辨率于输入图像之比的倒数,且此参数允许创制三个比输入图像分辨率低的累积器。上述文字倒霉精晓的话,来看例子吗。譬如,尽管dp= 1时,累积器和输入图像具备同样的分辨率。要是dp=2,累积器便有输入图像二分之一那么大的上涨的幅度和可观。
  • 第多个参数,double类型的minDist,为霍夫转变检查实验到的圆的圆心之间的蝇头间隔,即让大家的算法能显明分裂的五个不等圆之间的一丁点儿间距。这些参数假设太小的话,八个相邻的圆大概被指鹿为马地检查测试成了叁个重叠的圆。反之,那么些参数设置太大的话,某个圆就不能够被检查测试出来了。
  • 第多个参数,double类型的param1,有私下认可值100。它是第多少个参数method设置的检验方法的呼应的参数。对眼下唯黄金年代的章程霍夫梯度法CV_HOUGH_GRADIENT,它象征传递给canny边缘检查实验算子的高阈值,而低阈值为高阈值的十分之五。
  • 第八个参数,double类型的param2,也可以有暗许值100。它是第三个参数method设置的检查测量试验方法的呼应的参数。对近期唯黄金时代的措施霍夫梯度法CV_HOUGH_GRADIENT,它代表在检验阶段圆心的累积器阈值。它越小的话,就能够检查实验到愈来愈多根本海市蜃楼的圆,而它越大的话,能经过检测的圆就越来越周边完美的圈子了。
  • 第四个参数,int类型的minRadius,有暗许值0,表示圆半径的蝇头值。
  • 第九个参数,int类型的maxRadius,也可能有暗许值0,表示圆半径的最大值。

    1 Mat src_color = imread("C:/Users/Administrator/Desktop/环形计数专利/样板图像/白环.png"State of Qatar;//读取原彩色图
    2 //imshow("原图-彩色", src_color卡塔尔; 3 4 //声圣元(Synutra卡塔尔(قطر‎个三通道图像,像素值全为0,用来将霍夫调换检查测试出的圆画在地点
    5 Mat dst(src_color.size(), src_color.type()); 6 dst = Scalar::all(0); 7 8 Mat src_gray;//彩图转变成灰度图
    9 cvtColor(src_color, src_gray, CV_BGR2GRAY); 10 threshold(src_gray, src_gray, 100, 255, CV_THRESH_OTSU); 11 src_gray = 255 - src_gray; 12 imshow("原图-灰度", src_gray); 13 //imwrite("src_gray.png", src_gray卡塔尔国; 14 15 Mat bf;//对灰度图像举办双边滤波
    16 bilateralFilter(src_gray, bf, kvalue, kvalue * 2, kvalue / 2卡塔尔; 17 //imshow("灰度双边滤波管理", bfState of Qatar; 18 //imwrite("src_bf.png", bf); 19 20 vector circles;//声惠氏(Beingmate卡塔尔(قطر‎个向量,保存检验出的圆的圆心坐标和半径
    澳门电子游戏平台,21 HoughCircles(bf, circles, CV_HOUGH_GRADIENT, 1.5, 20, 130, 38, 10, 50卡塔尔国;//霍夫转变检验圆
    22 cout << circles.size() << endl; 23 //cout << "x=ty=tr=" << endl; 24
    25 for (size_t i = 0; i < circles.size(State of Qatar; i++卡塔尔国//把霍夫转变检查实验出的圆画出来
    26 { 27 Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); 28 int radius = cvRound(circles[i][2]); 29 30 circle(dst, center, 0, Scalar(0, 255, 0), -1, 8, 0); 31 circle(dst, center, radius, Scalar(0, 0, 255), 2, 8, 0); 32 33 //cout << cvRound(circles[i][0]) << "t" << cvRound(circles[i][1]) << "t" 34 //<< cvRound(circles[i][2]) << endl;//在决定台出口圆心坐标和半径
    35 } 36
    37 imshow("特征提取", dstState of Qatar; 38 //imwrite("dst.png", dst卡塔尔; 39 40 waitKey(卡塔尔(قطر‎;

HoughCircles(InputArray image,  int method, double dp, double minDist,double param1 = 100, double param2=100, int minRadius=0, int maxRadius=0 )