博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV学习(19) 细化算法(7)
阅读量:5888 次
发布时间:2019-06-19

本文共 902 字,大约阅读时间需要 3 分钟。

最后再来看一种通过形态学腐蚀和开操作得到骨架的方法。

代码非常简单:

void gThin::cvmorphThin(cv::Mat& src, cv::Mat& dst)

    {

    if(src.type()!=CV_8UC1)
        {
        printf("只能处理二值或灰度图像\n");
        return;
        }
   //非原地操作时候,copy src到dst
    if(dst.data!=src.data)
        {
        src.copyTo(dst);
        }

    cv::Mat skel(dst.size(), CV_8UC1, cv::Scalar(0));

    cv::Mat temp(dst.size(), CV_8UC1);

    cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));

    bool done;
    do
        {
        cv::morphologyEx(dst, temp, cv::MORPH_OPEN, element);
        cv::bitwise_not(temp, temp);
        cv::bitwise_and(dst, temp, temp);
        cv::bitwise_or(skel, temp, skel);
        cv::erode(dst, dst, element);

        double max;

        cv::minMaxLoc(dst, 0, &max);
        done = (max == 0);
        } while (!done);

        dst = skel;

    }

算法原理如下,就是通过十字型结构元素开操作的的补集和当前像素相与来作为骨架。当图像腐蚀为全0时候,就得到了整个图像的骨架。

img = ...;while (not_empty(img)){    skel = skel | (img & !open(img));    img = erosion(img);}

程序源代码:工程FirstOpenCV11

转载于:https://www.cnblogs.com/mikewolf2002/p/3329918.html

你可能感兴趣的文章
sed
查看>>
c#拦截程序的运行
查看>>
[转载] 百科全说——潘怀宗:“认识”食品添加剂(10-10-19)
查看>>
第一行代码
查看>>
IntelliJ IDEA快捷键大全
查看>>
[转载] 高级人工智能——第1章 绪论
查看>>
windows 2003的基本培配置
查看>>
我的友情链接
查看>>
DATAGUARD搭建脚本.
查看>>
[转载] 七龙珠第一部——第126话 复活的神龙
查看>>
第五阶段计划
查看>>
SDN in Action: Practice SDN/OpenFlow with LINC-Switch and OpenDaylight
查看>>
Java基础学习总结(19)——Java环境变量配置
查看>>
Java基础学习总结(1)——equals方法
查看>>
浅谈mysql优化方式
查看>>
如何修改MySQL字符集
查看>>
C++语言学习(十五)——C++抽象类与接口
查看>>
Java基础学习总结(4)——对象转型
查看>>
二、使用Okio框架进行输出操作(Sink)
查看>>
Maven学习总结(八)——使用Maven构建多模块项目
查看>>