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

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

//  检测边角点,然后画出最大矩形
+ (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);
}

下面是原图和效果图

原图:


效果图:



猜你喜欢

转载自blog.csdn.net/a121267963/article/details/78401254
今日推荐