Giriş
Resimdeki daireleri bulmak için kullanılır. Bu metodun kardeşi HoughLines metodudur.
HoughCircles
Önce çıktıyı alacağımız bir vector tanımlarız. Şöyle yaparız.
Parametreler şöyle
srs_gray : Birinci parametre girdi olan image,
circles : İkinci parametre x,y,z yani dairenin noktasal değerlerini saklayan vector,
detection method : Üçüncü parametre her zaman HOUGH_GRADIENT
dp : Dördüncü parametre inverse ratio or resolution. Ne olduğunu anlamadım. double tipindendir ve hep 1 değeri alıyor. Şöyle yaparız.
param_1 ve param_2 : Altı ve yedinci parametreler Canny Edge Detector için kullanılacak al ve üst eşik değerleri. double tipindendir. Varsayılan değerleri 100'dür.
min_radius ve max_radius : En son iki parametre bulunmasını istediğimiz dairenin min ve max radius değerleridir. int tipindendir. Varsayılan değerleri 0'dır. Eğer 0 verirsek her şeyi bulur.
Resimdeki daireleri bulmak için kullanılır. Bu metodun kardeşi HoughLines metodudur.
HoughCircles
Önce çıktıyı alacağımız bir vector tanımlarız. Şöyle yaparız.
vector<Vec3f> circles;
Şu kod Vec3f kullanılmadığı için yanlıştır.cv::vector< cv::vector<int> > circles;
cv::HoughCircles(..., circles, ...);
Şöyle yaparız.Parametreler şöyle
srs_gray : Birinci parametre girdi olan image,
circles : İkinci parametre x,y,z yani dairenin noktasal değerlerini saklayan vector,
detection method : Üçüncü parametre her zaman HOUGH_GRADIENT
dp : Dördüncü parametre inverse ratio or resolution. Ne olduğunu anlamadım. double tipindendir ve hep 1 değeri alıyor. Şöyle yaparız.
double dp = 1;
min_dist : Beşinci parametre bulunan daireler arasındaki asgari uzaklıkparam_1 ve param_2 : Altı ve yedinci parametreler Canny Edge Detector için kullanılacak al ve üst eşik değerleri. double tipindendir. Varsayılan değerleri 100'dür.
min_radius ve max_radius : En son iki parametre bulunmasını istediğimiz dairenin min ve max radius değerleridir. int tipindendir. Varsayılan değerleri 0'dır. Eğer 0 verirsek her şeyi bulur.
HoughCircles(img, circles, HOUGH_GRADIENT, 1,
max(img.cols,img.rows), // to find only the biggest perfect circle
100, 100, 0,0 );
Resim üzerine işaretleme yapmak için şöyle yaparız.//draw
for( size_t i = 0; i < circles.size(); i++ )
{
Vec3i c = circles[i];
cv::circle (img, Point(c[0], c[1]), c[2], Scalar(0,0,255), 3, LINE_AA);
cv::circle (img, Point(c[0], c[1]), 2, Scalar(0,255,0), 3, LINE_AA);
}
Hiç yorum yok:
Yorum Gönder