在opencv

时间:2017-12-05 17:12:17

标签: opencv c++11

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;
}

我从here获取了这段代码,基本上是角点检测并围绕它绘制圆圈。 我想问(规范化 convertScaleAbs 工作的地方&#34; ????&#34;在代码中提到)。我已经阅读了文档,但我仍然有疑问。我也输出了 dst_norm ,但它没有帮助我。 我得到 normalize 用于更改数组中的值范围, convertScaleAbs 将CV_32FC1类型图像转换为CV_8UC1。 但我无法理解任何见解(即我输出时如何得到dst_norm和dst_scale)。 任何帮助将不胜感激....

screen shot for reference

0 个答案:

没有答案