Lets try varying the parameters in HT by trackbar and see what happens.
#include<iostream>
#include<highgui.h>
#include<cv.h>
using namespace std;
using namespace cv;
Mat img;
int thresh=100;
int a=1,b=10,c=100,d=5;
int a_min=1,a_max=20;
int b_min=1,b_max=100;
int c_min=1,c_max=200;
int d_min=1,d_max=10;
void on_trackbar_a(int pos,void *){
a=pos;
}
void on_trackbar_b(int pos,void *){
b=pos;
}
void on_trackbar_c(int pos,void *){
c=pos;
}
void on_trackbar_d(int pos,void *){
d=pos;
}
void on_trackbar(int, void *){
Mat img_gray;
cvtColor(img,img_gray,CV_RGB2GRAY);
vector<Vec3f> circles;
HoughCircles(img_gray,circles,CV_HOUGH_GRADIENT,a,b,c,thresh,d);
Mat img_show=img.clone();
for(int i=0;i<circles.size();i++){
Point center(cvRound(circles[i][0]),cvRound(circles[i][1]));
int radius=cvRound(circles[i][2]);
circle(img_show,center,3,Scalar(0,0,255),-1);
circle(img_show,center,radius,Scalar(0,0,255),3,8,0);
}
imshow("Shapes",img_show);
}
int main()
{
img =imread("images/linescircles.jpg");
namedWindow("Shapes");
imshow("Shapes",img);
createTrackbar("Acc. threshold","Shapes",&thresh,300,on_trackbar);
on_trackbar(0,0);
createTrackbar("A","Shapes",&a_min,a_max,on_trackbar_a);
createTrackbar("B","Shapes",&b_min,b_max,on_trackbar_b);
createTrackbar("C","Shapes",&c_min,c_max,on_trackbar_c);
createTrackbar("D","Shapes",&d_min,d_max,on_trackbar_d);
setTrackbarPos("A","Shapes",a);
setTrackbarPos("B","Shapes",b);
setTrackbarPos("C","Shapes",c);
setTrackbarPos("D","Shapes",d);
on_trackbar(0,0);
while(char(waitKey(0))!='q'){}
return 0;
}
No comments:
Post a Comment