美文网首页
iOS openCV 获取掩码图中的最大矩形

iOS openCV 获取掩码图中的最大矩形

作者: 小点草 | 来源:发表于2020-02-25 10:42 被阅读0次

    直接上代码

    +(CGRect)maximumRectBy:(UIImage *)image{
        cv::Mat srcImgMat;
        UIImageToMat(image, srcImgMat);
        
    //    cv::Mat resultMat;
    //    cv::pyrDown(srcImgMat, resultMat);
        
        cv::Mat gray;
        cv::cvtColor(srcImgMat, gray, CV_BGR2GRAY);
        
        // 进行二值化处理
        cv::Mat binary;
            // 用cv::threshold函数创建一个二值图像。常规阈值化模型(CV_THRESH_BINARY)下,
            // 所有大于指定阈值的像素赋值为预定的最大值(参数4),将其他像素赋值为0
            cv::threshold(gray, binary, // 输入/输出图像
                80,                     // 阈值(必须<256)
                255,                    // 最大值
                CV_THRESH_BINARY);
        
        std::vector<cv::Mat> contours;
        
        cv::Mat hierarchy;
        
        cv::findContours(binary, contours,hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
        
        int minX = 0,maxX = 0,minY = 0,maxY = 0;
        
        for(int i=0;i<contours.size();i++){
            cv::Mat c = contours[i];
            cv::Rect rect = cv::boundingRect(c);
            
            int mx = rect.x,my = rect.y,mX = rect.x + rect.width,mY = rect.y + rect.height;
            if (i==0){
                minX = mx;
                maxX = mX;
                minY = my;
                maxY = mY;
            }else{
                minX = minX < mx ? minX : mx;
                maxX = maxX > mX ? maxX : mX;
                minY = minY < my ? minY : my;
                maxY = maxY > mY ? maxY : mY;
            }
            
        }
        CGRect cgRect = CGRectMake(minX, minY, maxX-minX, maxY-minY);
        
        if(CGRectIsEmpty(cgRect)){
            return CGRectMake(0, 0, image.size.width, image.size.height);
        }
        
        return cgRect;
        
    }
    

    相关文章

      网友评论

          本文标题:iOS openCV 获取掩码图中的最大矩形

          本文链接:https://www.haomeiwen.com/subject/kzszqhtx.html