使用opencv,在iOS环境下检测边角点,然后画出最大矩形

来源:互联网 发布:淘宝定金是什么意思 编辑:程序博客网 时间:2024/06/05 19:38

直接看代码,具体环境这里就不说了

//  检测边角点,然后画出最大矩形+ (UIImage*)opneCvdot:(UIImage*)image {    cv::Mat src;        UIImageToMat(image, src);        cv::Mat  grayMat;    cv::cvtColor(src,  grayMat, CV_BGR2GRAY);        //根据参数找出角点    std::vector<cv::Point2f> corners;        int maxCorners = 8; // // 最多检测到的角点数, 12    double qualityLevel = 0.05; // 阈值系数 0.01    double minDistance = 10; // 角点间的最小距离 10    int blockSize = 10; // 计算协方差矩阵时的窗口大小 10    bool useHarrisDetector = false; // 是否使用Harris角点检测,如不指定,则计算shi-tomasi角点, false    double k = 0.04; // Harris角点检测需要的k值 0.04        cv::goodFeaturesToTrack(cv::InputArray(grayMat), cv::OutputArray(corners), maxCorners, qualityLevel, minDistance, cv::Mat(), blockSize, useHarrisDetector, k);    //建立包围所有角点的矩形    cv::Rect rect = cv::boundingRect(cv::InputArray(corners));        //把每个检测到的角点在图中用圆形标识出来(方便调试)    for( int i = 0; i < corners.size(); i++ )    {        cv::circle(cv::InputOutputArray(grayMat), corners[i], 10, cv::Scalar(0,255,0), 2, 8, 0);    }    //把包围所有角点的矩形也画出来(方便调试)    cv::rectangle(grayMat, rect, cv::Scalar(0,255,0), 5, 8, 0);        return MatToUIImage(grayMat);}

下面是原图和效果图

原图:


效果图:



原创粉丝点击