天天看點

用霍夫圓檢測檢測圖像中的圓

用霍夫圓檢測檢測圖像中的圓

霍夫圓檢測是opencv中用來檢測圓的重要算法,簡單的說,霍夫圓檢測就是對圖像中的弧線做切線,再在切點位置做切線的垂線,然後看這些垂線能交于一點的個數,這個在方法中是自己設定的。
HoughCircles(thresh, circles, HOUGH_GRADIENT, 1, 50, 100, 10, 20, 80);
參數:
thresh:輸入圖像的矩陣
Circles:傳回圓的資訊,包括圓的橫坐标,縱坐标,半徑
methed:CV_HOUGH_GRADIENT,2-1霍夫圓檢測
dp:計數器分辨率
minDist:圓心直接的最小距離,防止出現圓和圓相交。
Param1:Canny邊緣檢測的雙門檻值中的高門檻值,低門檻值預設為它的一半
Param2:最小投票數,基于圓心的投票數,也就是交線數量
minRadius:需要檢測圓的最小半徑,用來過濾掉一些太小的圓
maxRadius:需要檢測圓的最大半徑,過濾掉一些太大的圓
附C++代碼
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <vector>

using namespace std;
using namespace cv;
class CircleInfo;

int main()
{
//讀取圖像
	Mat img = imread("D:\\code\\code\\0002\\yuan82.jpg");
	Mat gray;
	Mat thresh;
//轉成灰階
	cvtColor(img, gray, COLOR_BGR2GRAY);
//二值化處理
	threshold(gray, thresh, 100, 255, THRESH_BINARY);
	vector<Vec3f> circles;
//霍夫圓檢測
	HoughCircles(thresh, circles, HOUGH_GRADIENT, 1, 50, 100, 10, 20, 80);
}
附python代碼

import cv2
import numpy as np 

img = cv2.imread('yuan88.jpg')
print(img.shape)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh,img1 = cv2.threshold(img, 90, 255, cv2.THRESH_BINARY)
circles = cv2.HoughCircles(img1,cv2.HOUGH_GRADIENT,1,50,param1=100,param2=20,minRadius=25   ,maxRadius=60)