其实在opencv里面是有骨架提取的代码的
只不过是在扩展模块opencv-contrib

void cv::ximgproc::thinning  (   InputArray  src,OutputArray     dst,int     thinningType = THINNING_ZHANGSUEN
)

其代码介绍为

Applies a binary blob thinning operation, to achieve a skeletization of the input image.
(应用于腌摸细化操作,从而实现对输入图像的骨架提取)
The function transforms a binary blob image into a skeletized form using the technique of Zhang-Suen.
(这个函数是使用Zhang-Suen的技术实现从腌摸到骨架的转换)

Parameters

  • src Source 8-bit single-channel image, containing binary blobs, with blobs having 255 pixel values.
  • dst Destination image of the same size and the same type as src. The function can work in-place.
  • thinningType Value that defines which thinning algorithm should be used. See cv::ximgproc::ThinningTypes

但是想一想如果只想要这一个功能,编译那么多是挺麻烦的
作为一名代码搬运工,我就从里面扣出来了这一段

enum thinningType{THINNING_ZHANGSUEN,THINNING_GUOHALL
};
// Applies a thinning iteration to a binary image
static void thinningIteration(Mat img, int iter, int thinningType){Mat marker = Mat::zeros(img.size(), CV_8UC1);if(thinningType == THINNING_ZHANGSUEN){for (int i = 1; i < img.rows-1; i++){for (int j = 1; j < img.cols-1; j++){uchar p2 = img.at<uchar>(i-1, j);uchar p3 = img.at<uchar>(i-1, j+1);uchar p4 = img.at<uchar>(i, j+1);uchar p5 = img.at<uchar>(i+1, j+1);uchar p6 = img.at<uchar>(i+1, j);uchar p7 = img.at<uchar>(i+1, j-1);uchar p8 = img.at<uchar>(i, j-1);uchar p9 = img.at<uchar>(i-1, j-1);int A  = (p2 == 0 && p3 == 1) + (p3 == 0 && p4 == 1) +(p4 == 0 && p5 == 1) + (p5 == 0 && p6 == 1) +(p6 == 0 && p7 == 1) + (p7 == 0 && p8 == 1) +(p8 == 0 && p9 == 1) + (p9 == 0 && p2 == 1);int B  = p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9;int m1 = iter == 0 ? (p2 * p4 * p6) : (p2 * p4 * p8);int m2 = iter == 0 ? (p4 * p6 * p8) : (p2 * p6 * p8);if (A == 1 && (B >= 2 && B <= 6) && m1 == 0 && m2 == 0)marker.at<uchar>(i,j) = 1;}}}if(thinningType == THINNING_GUOHALL){for (int i = 1; i < img.rows-1; i++){for (int j = 1; j < img.cols-1; j++){uchar p2 = img.at<uchar>(i-1, j);uchar p3 = img.at<uchar>(i-1, j+1);uchar p4 = img.at<uchar>(i, j+1);uchar p5 = img.at<uchar>(i+1, j+1);uchar p6 = img.at<uchar>(i+1, j);uchar p7 = img.at<uchar>(i+1, j-1);uchar p8 = img.at<uchar>(i, j-1);uchar p9 = img.at<uchar>(i-1, j-1);int C  = ((!p2) & (p3 | p4)) + ((!p4) & (p5 | p6)) +((!p6) & (p7 | p8)) + ((!p8) & (p9 | p2));int N1 = (p9 | p2) + (p3 | p4) + (p5 | p6) + (p7 | p8);int N2 = (p2 | p3) + (p4 | p5) + (p6 | p7) + (p8 | p9);int N  = N1 < N2 ? N1 : N2;int m  = iter == 0 ? ((p6 | p7 | (!p9)) & p8) : ((p2 | p3 | (!p5)) & p4);if ((C == 1) && ((N >= 2) && ((N <= 3)) & (m == 0)))marker.at<uchar>(i,j) = 1;}}}img &= ~marker;
}// Apply the thinning procedure to a given image
void thinning(InputArray input, OutputArray output, int thinningType){Mat processed = input.getMat().clone();// Enforce the range of the input image to be in between 0 - 255processed /= 255;Mat prev = Mat::zeros(processed.size(), CV_8UC1);Mat diff;do {thinningIteration(processed, 0, thinningType);thinningIteration(processed, 1, thinningType);absdiff(processed, prev, diff);processed.copyTo(prev);}while (countNonZero(diff) > 0);processed *= 255;output.assign(processed);
}

之后就复制粘贴到自己的代码里用吧

opencv 骨架提取/图片细化 代码相关推荐

  1. python+opencv人脸识别-图片处理+代码

    首先安装opencv: cmd 然后输入:install opencv-python 刚接触人脸识别,正在学习:代码是从绘制图片到人脸识别,里面的jpg图片找个有一个人脸图片就行,放在项目的根目录下就 ...

  2. opencv 骨架提取_抗爆墙方盛提取车间抗爆墙记录@温州贴吧

    抗爆墙方盛提取车间抗爆墙记录@温州贴吧 河北鼎卓安防设备科技公司pnXPz8uK抗爆墙,泄爆墙专业供应商,是一家集生产.销售及运营于一体的抗爆墙,泄爆墙生产的企业,拥有一支专业性强.技术精.素质高的生 ...

  3. html如何提取图片颜色代码,PS怎么提取颜色做色卡?

    PS怎么提取颜色做色卡? 方法1: 打开PS软件,直接拖动要制作成色卡的图片到窗口,然后选择上方编辑栏的[滤镜]--[像素化]--[马赛克],如图: 单元格数字大小随意自己掌控,数字越小,得到的颜色越 ...

  4. android提取图片颜色代码,Android 中动态提取图片中颜色作为主题色

    功能需求 一个页面中顶部显示一张图片(图片从网络加载),此时需要根据图片的颜色来动态调整顶部标题栏的背景色. 技术要求 Android 调色板支持库 实现过程 1.添加调色板支持库 dependenc ...

  5. Python实现形态学处理及骨架提取、细化等基本操作

    更多内容请移步AlanLiangC.github.io

  6. 骨架提取matlab细化算法,基于拉普拉斯收缩的三维模型骨架提取算法及其Matlab实现...

    3D skeleton extraction algorithm via Laplace contraction and its realization in Matlab JI Weijie 1 冀 ...

  7. Zhang-Suen 图像骨架提取算法的原理和OpenCV实现

    记录一下图像骨架提取算法,转载至 两种图像骨架提取算法的研究(1)原理部分 基于OpenCV的实现代码如下,代码部分参考 opencv骨架提取/图像细化 void thinImage(Mat & ...

  8. (代码已更新)QT 环境下 用opencv 进行骨架细化(骨架提取)得到图像中心线

    之前的任务是把如下的一个直钢管图像进行处理,提取出中心线,用到了骨架细化算法以及一些常用的opencv处理.思路就是: 预处理通过灰度得到二值图像--二值图形态学处理--骨架细化提取中心线--霍夫概率 ...

  9. 【opencv】经典的细化提取骨架理论及源代码

    做项目时碰到特征的骨架提取,找了挺多相关资料,发现这篇博客讲的最完整,而且通俗易懂,完美解决碰到的问题,特转载如下,供更多的人学习.转自:https://www.cnblogs.com/mikewol ...

最新文章

  1. 4 信道编码之循环码
  2. Linux的Vi编辑器
  3. c语言创建学生成绩表,C语言创建信息链表,求助
  4. Linux ubuntu安装搜狗输入法
  5. Knight Moves(信息学奥赛一本通-T1450)
  6. ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树
  7. 红黑树-想说爱你不容易
  8. 几款免费好用的OCR工具
  9. Swagger文档转Word 文档
  10. Representing Long-Range Context for Graph Neural Networks with Global Attention
  11. python常用的几个库_盘点Python常用的20个库
  12. 百度统计的JS脚本原理分析 2013年文章转载
  13. realme手机用什么蓝牙耳机好?2022公认音质最好的蓝牙耳机
  14. 重磅|棱镜七彩同CNCERT联合发布开源软件供应链安全风险研究报告了!!
  15. HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角
  16. 免费离线PDF工具箱,PDF工具大全,PDF合并PDF加密PDF解密PDF格式转换PDF分割PDF旋转以及从PDF中提取图片,满足对PDF操作的一切需求~完全免费无使用次数限制,文末附下载链接~
  17. 位运算(异或、左移、右移)的运算规则
  18. 科普大佬说 | 港大黄凯斌老师带你解锁黑客帝国与6G的关系
  19. 错误 You've successfully authenticated, but Gitee.com does not provide she access.
  20. 白嫖?超赞应用推荐全干货

热门文章

  1. Android设置默认输入法
  2. 如何设置一个按钮 左边方形右边圆形
  3. 水果整理篇--苹果橘子
  4. python汽车租赁程序_python数据分析实例:共享单车租用影响因素探索
  5. [Win Desktop] Windows 桌面应用推荐一
  6. 裴建瑞2021011195
  7. 了解传统教育培训机构的痛点
  8. 产品引流的方式有哪些?适合引流推广的平台有哪些?
  9. 安装文本编辑器 Geany
  10. 微商大咖龚文祥遭查税:退出微商,微信收款有补税风险?