本文主要介绍:利用递归函数,求四连通和八连通邻域。

一、变量定义

1.定义邻域类型

int m_linkType = 4 // 4表示4连通邻域 8表示8连通邻域

2.定义搜寻方向

POINT posDir[8];

posDir[0].x=0; posDir[0].y = -1; //上

posDir[1].x=0; posDir[1].y=1; //下

posDir[2].x=-1; posDir[2].y=0; //左

posDir[3].x=1;posDir[3].y=0; //右

posDir[4].x=-1; posDir[4].y=-1; //左上

posDir[5].x=1;posDir[5].y=-1; //右上

posDir[6].x=-1;posDir[6].y=1; //左下

posDir[7].x=1;posDir[7].y=1; //右下

二、对某一点求连通域函数

/******************************************************************

功能:对某个像素点,用递归函数求连通域

参数:

Inimg :输入图像矩阵

Flag :像素点有没有遍历过标志 0 表示没有 非0表示有

如果对连通域编号,可以赋值为编号值

row :像素点行

col :像素点列

Width :图像矩阵宽

Height:图像矩阵行

Value :起始点像素值

******************************************************************/

void ConnectRegion(unsigned char *Inimg,unsigned char *Flag,int row,

int col,int Width,int Height,int Value)

{

if(row<0||row>=Height||col<0||col>=Width) //如果该次遍历点的行列数,超出图像大小,

return; //则结束本次调用

int tIND2 = row*Width+col;

if(Inimg[tIND2]!=Value||Flag[tIND2]!=0) //如果该次遍历点的像素值不等于起始像素点值,

return; //或该点已遍历过,则结束本次调用

Flag[tIND2] =1;//标记该点已遍历过,也可以赋值为联通域编号,非0即可

//这里,可以得到与起始点连通的点的行列号 row col

//可以根据需求,对行列号存储或计算连通域边界

if(m_linkType==4)

for(int i=0;i<4;i++)//递归搜寻连通域

ConnectRegion(Inimg,Flag,row+posDir[i].y,col+posDir[i].x,Width,Height,Value);

if(m_linkType==8)

for(int i=0;i<8;i++)//递归搜寻连通域

ConnectRegion(Inimg,Flag,row+posDir[i].y,col+posDir[i].x,Width,Height,Value);

}

3.调用形式

//假定图像矩阵Inimg已知 Width:图像宽 Height:图像高

unsigned char *Flag = new unsigned char[Width*Height];//初始化遍历标志

ZeroMemory(Flag,sizeof(unsigned char)*Width*Height);

int tIND1,tIND2;

for(int i=0; i

{

tIND1 = i*Width;

for(int j=0;j

{

tIND2 = tIND1 + j;

if(Flag[tIND2]==0)//该点没有遍历过,即没有连通号

ConnectRegion(Inimg,Flag,i,j,Width,Height,Inimg[tIND2]);//寻找与该点连通的区域

}

}

c语言 连通域算法 递归,递归函数求连通域相关推荐

  1. c语言编程最大公约数穷举发,C语言基本算法 :1.求最大公约数与最小公倍数

    C语言基本算法 :1.求最大公约数与最小公倍数 一.最大公约数: 最大公约数目前有三种求法:更相减损术.辗转相除法以及穷举法. 1.更相减损术: 算法介绍:设两个整数数a和b,以较大数减较小数,得出的 ...

  2. C语言编程用递归法求

    7,用递归法求: (x2!)+(xxx3!)+(5个x相乘5!)+-+((2n-2)个x相乘(2n-2)!)当N为某值是上式为几?(到第n项,n和x的值有键盘输入.) #include<stdi ...

  3. c语言 连通域算法 递归,VC++ 6.0编写计算机图形学中的种子填充算法,想用递归的八向连通域,求助!...

    VC++ 6.0编写计算机图形学中的种子填充算法,想用递归的八向连通域,求助!0 填充函数代码如下: void CComputerGraphicsView::PolygonFill2()//区域填充函 ...

  4. 寻找连通域算法_FPGA实现的连通域识别算法升级

    代码在这:https://github.com/becomequantum/kryon 还做了个算法演示动画:https://www.bilibili.com/video/av26067000 < ...

  5. c语言筛选法_「干货」C语言经典算法筛选法求质数,极少数人用过的素数求解法...

    小编是一个有着6年工作经验的工程师,关于C++编程,自己有做材料的整合,一个完整的C++编程学习路线,学习资料和工具,能够进我的群10048,-83029收取,免费送给大家,希望你也能凭着自己的努力, ...

  6. C语言编程用递归法求5!

    问题描述:请利用递归方法求5!. 问题分析:递归公式:km=km_1*4! 程序源码: #include<stdio.h> int main() { int i; int fact(); ...

  7. 给定0-1矩阵,求连通域

    图像处理题目: 注意,一下所有需要写代码的题目,不允许使用OpenCV的Mat类.如果图片内容需要用指针读取. 1 . 给定0-1矩阵,求连通域.(遇到过N次,笔试面试都有,最好做到能徒手hack代码 ...

  8. 如何用递归思想 求n的阶乘 C语言

    如何用递归思想 求n的阶乘 C语言 首先,我讲一下什么是递归? 一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数.执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函 ...

  9. 编写程序C语言 用递归法求n,用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n...

    用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧 ...

最新文章

  1. fiddler使用技巧进阶,如何抓包修改数据?——AutoResponder重定向
  2. java 数组排序论文_Java中运用数组的四种排序方法
  3. java7新特性之Try-with-resources statement
  4. linux双4g内存花屏,linux不支持4G内存的处理方法
  5. 数据库视频(一)——整体认识
  6. 技术管理者必备管理模板
  7. 小米净水器更换php教程,这种方法更换滤芯寿命更长:小米净水器
  8. [js插件]分享一个文章内容信息提示插件Colortip
  9. [禅悟人生]将所学转化成修行
  10. What is a hardlink and how to create one?
  11. Aircrack-ng破解WEP
  12. 浏览器被hao123劫持首页处理
  13. Microbiome:粪菌移植改善自闭症Fecal microbiota transplant (FMT)
  14. NodeJS 运行环境
  15. 计算机应用基础前言,大学计算机基础
  16. vscode的下载与安装教程
  17. 豪森药业阿美乐获批,全球第二个三代EGFR-TKI创新药
  18. 计算机语言VLOOKUP,R下如何实现VLOOKUP函数功能
  19. 今日金融词汇---应收,是什么?
  20. struts漏洞总结

热门文章

  1. 计划任务定时重启mysql_定时重启MySQL、定时重启Apache [任务计划]
  2. brisk matlab,opencv学习笔记三十七:BRISK特征点检测与匹配
  3. 为了孩子学英语,花几天时间写了个语法练习小程序
  4. CLIP(Contrastive Language-Image Pretraining)主体网络代码详解
  5. 爆火AIGC产品卷翻海外营销:AI一键搞定美工和拍摄,抠图PS设计样样精通,月活迅速破百万...
  6. 数据治理服务解决方案word
  7. iOS开发 - HTTP终结者 ASI
  8. spring xml头文件xmlns和xsi的含义
  9. 【id:56】【20分】C. 子串循环问题 (Ver. I)
  10. 【Linux】Linux进程的理解 --- 进程描述符、状态、优先级、切换…