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

本文介绍了一种使用OpenCV库检测图像中的角点并绘制最大包围矩形的方法。通过调整参数,可以控制检测到的角点数量及质量等。最后展示了原图与处理后的效果对比。

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

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

下面是原图和效果图

原图:


效果图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值