[blog 机器视觉]最大轮廓和投影

最大轮廓和投影

最近非常多的用到了最大轮廓和投影运算。回想起来,这两种算法的确是属于非常常见的基础算法。这里加以总结和提取。

最大轮廓:

前提是图像经过了灰度和阈值处理,也可以直接处理canny的结果,有些时候需要预先经过色彩域的转换。最后得到的结果,应该是一个contour,当然可以采用一定的方法处理得到外接矩形。

//寻找最大的轮廓
vector<cv::Point> FindBigestContour(Mat src)
{    
    int imax = 0; //代表最大轮廓的序号
    int imaxcontour = -1; //代表最大轮廓的大小
    std::vector<std::vector<cv::Point>>contours;    
    findContours(src,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
    for (int i=0;i<contours.size();i++)
    {
        int itmp =  contourArea(contours[i]);//这里采用的是轮廓大小
        if (imaxcontour < itmp )
        {
            imax = i;
            imaxcontour = itmp;
        }
    }
    return contours[imax];
}

调用方法,得到外接矩阵

Rect boundRect = boundingRect(Mat(FindBigestContour(canny)));

投影处理

     这里的前提和最大轮廓是非常相似的。投影主要关心的是通过投影图像,获得原始图像中的ROI,或者获得有多少个上波形多少个下波形这些定量的结果。

Vector<int> vectorV; //横向循环
    Vector<int> vectorH; //纵向循环
    Vector<int> VUpper;
    Vector<int> VDown;
    vector<int> HUpper;
    vector<int> HDower;

// 做横向循环
    for (int i=0;i<ostu.cols;i++)
    {
        Mat data = ostu.col(i);
        int itmp = countNonZero(data);
        vectorV.push_back(itmp);
    }
    //上波形为VUpper,下波形为VDown
    for (int i=1;i<vectorV.size();i++)
    {
        if (vectorV[i-1] == 0 && vectorV[i]>0)
        {
            VUpper.push_back(i);
        }
        if (vectorV[i-1]>0 && vectorV[i] == 0)
        {
            VDown.push_back(i);
        }
    }
    //做纵向循环,这个往往处理的是横向循环的结果图片
      for (int j=0;j<ostu.rows;j++)
        {
            Mat data = roitmp.row(j);
            int itmp = countNonZero(data);
            vectorH.push_back(itmp);
        }
        for (int j=0;j<vectorH.size()-1;j++)
        {   
            if (vectorH[j]>0 && vectorH[j+1] == 0)
            {
                HDower.push_back(j);
            }
            if (vectorH[j] == 0 && vectorH[j+1]>0)
            {
                HUpper.push_back(j);
            }
        }

//由于处理的上波形和下波形可能会有问题,需要进行一定的处理
     //这里的一个处理就是提出哪些短暂的空白区域
    for (int j=0;j<HDower.size()-1;j++)
            {
                //得出之间空白的区域
                int iwidth = HUpper[j+1] - HDower[j];
                if (iwidth > 10)
                {
                    iresult = iresult +1;
                }
            }

来自为知笔记(Wiz)

时间: 2024-10-18 22:22:25

[blog 机器视觉]最大轮廓和投影的相关文章

最大轮廓和投影 转

转自:http://www.opencv.org.cn/forum.php?mod=viewthread&tid=37839&page=1 最大轮廓和投影        最近非常多的用到了最大轮廓和投影运算.回想起来,这两种算法的确是属于非常常见的基础算法.这里加以总结和提取.      最大轮廓:      前提是图像经过了灰度和阈值处理,也可以直接处理canny的结果,有些时候需要预先经过色彩域的转换.最后得到的结果,应该是一个contour,当然可以采用一定的方法处理得到外接矩形./

[blog 机器视觉]一维二维码的提取、识别和产生

一维二维码的提取.识别和产生 零.相关说明: 在"jsxyhelu.cnblogs.com/机器视觉"栏目主要介绍和图像处理和机器视觉相关的的成套的解决方案.思路和软件集.希望能够为大家在实际工作中解决具体问题提供一些帮助. 一.背景资料: 现在一维码.二维码广泛使用于工业各方面.很多和图像处理相关的需求也有所涉及.这里也看过一些论文,里面有一些方法还是art-of-air的,也有一些具备一定参考价值.这里只是谈一谈一般情况下的提取和识别.对于特殊情况,肯定要特殊对待,其实本身是一个增

shdsadjkwqjkjkwqwqwq

http://blog.zhulong.com/blog/detail5686154.html http://blog.zhulong.com/blog/detail5686160.html http://blog.zhulong.com/blog/detail5686166.html http://blog.zhulong.com/blog/detail5686170.html http://blog.zhulong.com/blog/detail5693565.html http://blo

鞍山的好奇我合计为顷刻间即可完全健康请我

http://blog.zhulong.com/blog/detail5686154.html http://blog.zhulong.com/blog/detail5686160.html http://blog.zhulong.com/blog/detail5686166.html http://blog.zhulong.com/blog/detail5686170.html http://blog.zhulong.com/blog/detail5693565.html http://blo

ashdwhqjhjwqejhwqjkjkwqjkwqwq

blog.zhulong.com/blog/detail5686154.html blog.zhulong.com/blog/detail5686160.html blog.zhulong.com/blog/detail5686166.html blog.zhulong.com/blog/detail5686170.html blog.zhulong.com/blog/detail5693565.html blog.zhulong.com/blog/detail5693574.html blog

sadhqhjwjhwqjkwqjkjkqwwq

http://blog.zhulong.com/blog/detail5686154.html http://blog.zhulong.com/blog/detail5686160.html http://blog.zhulong.com/blog/detail5686166.html http://blog.zhulong.com/blog/detail5686170.html http://blog.zhulong.com/blog/detail5693565.html http://blo

鞍山地区无计划为全家健康去我家可千万

blog.zhulong.com/blog/detail5686154.html blog.zhulong.com/blog/detail5686160.html blog.zhulong.com/blog/detail5686166.html blog.zhulong.com/blog/detail5686170.html blog.zhulong.com/blog/detail5693565.html blog.zhulong.com/blog/detail5693574.html blog

python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)

目录 一:边缘提取 1.对图像进行阈值分割并反色 2.边缘提取 二:图像滤波 1.读取原图 2.均值滤波 3.中值滤波 4.高斯滤波 5.高斯边缘检测 三:边缘检测算子 1.显示原图 2.对图像进行反色 3.对图像用sobel方法进行边缘检测 4.对图像用robert方法进行边缘检测 四:投影 1.显示原图 2.垂直方向投影 3.水平方向投影 五:车牌字符分割 1.读取原图 2.灰度转换 3.反色 4.阈值分割 5.投影 6.字符识别匹配分割 ??机器视觉是人工智能正在快速发展的一个分支.简单说

[blog 算法原理]选择轮廓(select_shape)

选择轮廓(select_shape) Halcon是一款运用广泛的图像识别和处理软件.在肤浅的接触中,它的轮廓选择算子(select_shape)给予我很深的印象.结果是往往几行代码就能够产生很好的效果: 比如要得到这样的结果 只需要 read_image (Image1, 'F:/未来项目/钢管识别/FindTube/FindTube/1.jpg')rgb1_to_gray (Image1, GrayImage)threshold (GrayImage, Regions, 43, 111)co