opencv 骨架提取/图片细化 代码
其实在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 骨架提取/图片细化 代码相关推荐
- python+opencv人脸识别-图片处理+代码
首先安装opencv: cmd 然后输入:install opencv-python 刚接触人脸识别,正在学习:代码是从绘制图片到人脸识别,里面的jpg图片找个有一个人脸图片就行,放在项目的根目录下就 ...
- opencv 骨架提取_抗爆墙方盛提取车间抗爆墙记录@温州贴吧
抗爆墙方盛提取车间抗爆墙记录@温州贴吧 河北鼎卓安防设备科技公司pnXPz8uK抗爆墙,泄爆墙专业供应商,是一家集生产.销售及运营于一体的抗爆墙,泄爆墙生产的企业,拥有一支专业性强.技术精.素质高的生 ...
- html如何提取图片颜色代码,PS怎么提取颜色做色卡?
PS怎么提取颜色做色卡? 方法1: 打开PS软件,直接拖动要制作成色卡的图片到窗口,然后选择上方编辑栏的[滤镜]--[像素化]--[马赛克],如图: 单元格数字大小随意自己掌控,数字越小,得到的颜色越 ...
- android提取图片颜色代码,Android 中动态提取图片中颜色作为主题色
功能需求 一个页面中顶部显示一张图片(图片从网络加载),此时需要根据图片的颜色来动态调整顶部标题栏的背景色. 技术要求 Android 调色板支持库 实现过程 1.添加调色板支持库 dependenc ...
- Python实现形态学处理及骨架提取、细化等基本操作
更多内容请移步AlanLiangC.github.io
- 骨架提取matlab细化算法,基于拉普拉斯收缩的三维模型骨架提取算法及其Matlab实现...
3D skeleton extraction algorithm via Laplace contraction and its realization in Matlab JI Weijie 1 冀 ...
- Zhang-Suen 图像骨架提取算法的原理和OpenCV实现
记录一下图像骨架提取算法,转载至 两种图像骨架提取算法的研究(1)原理部分 基于OpenCV的实现代码如下,代码部分参考 opencv骨架提取/图像细化 void thinImage(Mat & ...
- (代码已更新)QT 环境下 用opencv 进行骨架细化(骨架提取)得到图像中心线
之前的任务是把如下的一个直钢管图像进行处理,提取出中心线,用到了骨架细化算法以及一些常用的opencv处理.思路就是: 预处理通过灰度得到二值图像--二值图形态学处理--骨架细化提取中心线--霍夫概率 ...
- 【opencv】经典的细化提取骨架理论及源代码
做项目时碰到特征的骨架提取,找了挺多相关资料,发现这篇博客讲的最完整,而且通俗易懂,完美解决碰到的问题,特转载如下,供更多的人学习.转自:https://www.cnblogs.com/mikewol ...
最新文章
- 4 信道编码之循环码
- Linux的Vi编辑器
- c语言创建学生成绩表,C语言创建信息链表,求助
- Linux ubuntu安装搜狗输入法
- Knight Moves(信息学奥赛一本通-T1450)
- ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树
- 红黑树-想说爱你不容易
- 几款免费好用的OCR工具
- Swagger文档转Word 文档
- Representing Long-Range Context for Graph Neural Networks with Global Attention
- python常用的几个库_盘点Python常用的20个库
- 百度统计的JS脚本原理分析 2013年文章转载
- realme手机用什么蓝牙耳机好?2022公认音质最好的蓝牙耳机
- 重磅|棱镜七彩同CNCERT联合发布开源软件供应链安全风险研究报告了!!
- HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角
- 免费离线PDF工具箱,PDF工具大全,PDF合并PDF加密PDF解密PDF格式转换PDF分割PDF旋转以及从PDF中提取图片,满足对PDF操作的一切需求~完全免费无使用次数限制,文末附下载链接~
- 位运算(异或、左移、右移)的运算规则
- 科普大佬说 | 港大黄凯斌老师带你解锁黑客帝国与6G的关系
- 错误 You've successfully authenticated, but Gitee.com does not provide she access.
- 白嫖?超赞应用推荐全干货