mardi 5 décembre 2017

normalize and convertScaleAbs insights in opencv

Mat img = imread("/home/akash/Desktop/coding/IP/openCV/chessBoard.jpg",1);
Mat gray;

int thresh = 200;

void corner_detect(int,void *){ 
    Mat dst = Mat::zeros(gray.size(),CV_32FC1);
    Mat dst_norm,dst_scale;

    cornerHarris(gray,dst,2,3,0.04);

    normalize(dst,dst_norm,0,255,NORM_MINMAX,CV_32FC1,Mat()); //????                
    convertScaleAbs(dst_norm,dst_scale);                      //????

    namedWindow("dst_norm",CV_WINDOW_AUTOSIZE);

    imshow("dst_norm",dst_norm);

    for(int i=0;i<dst_norm.rows;i++){
        for(int j=0;j<dst_norm.cols;j++){
            if(dst_norm.at<float>(i,j) > thresh){
                circle(dst_scale,Point(j,i),5,Scalar(0),2);
            }
        }
    }

    imshow("window",dst_scale);
}

int main(){

    namedWindow("window",CV_WINDOW_AUTOSIZE);
    namedWindow("input",CV_WINDOW_AUTOSIZE);

    cvtColor(img,gray,CV_BGR2GRAY);

    createTrackbar("threshold","window",&thresh,255,corner_detect);

    corner_detect(0,0);

    imshow("input",img);

    waitKey(0);
    return 0;
}

I have taken this code from here which is basically corner detection and drawing circles around it. I want to ask(where "????" is mentioned in code) working of normalize and convertScaleAbs. I have read the docs but I am still in doubt.I also outputted the dst_norm but it helped me none. I got that normalize is used to change the value range in array and convertScaleAbs is converting CV_32FC1 type image to CV_8UC1. But i am unable to understand any insights(i.e. how i got dst_norm and dst_scale when i outputted them). Any help would be appreciated....

screen shot for reference

Aucun commentaire:

Enregistrer un commentaire