Monday, 14 April 2014

#11c. Varying Parameters in Hough Transform

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