c语言 连通域算法 递归,递归函数求连通域

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

一、变量定义

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 :起始点像素值

*****

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于C语言连通域标记算法的示例代码。这段代码是使用递归实现的,可以在输入一个二值化图像后,输出标记后的连通域图像。 ``` #include <stdio.h> #include <stdlib.h> #define WIDTH 10 #define HEIGHT 10 int image[WIDTH][HEIGHT] = { {0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,0,0,0,0,0,0}, {0,1,0,1,0,0,0,0,0,0}, {0,1,1,1,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,0,0}, {0,0,0,0,0,1,0,1,0,0}, {0,0,0,0,0,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0} }; int label[WIDTH][HEIGHT] = {0}; int label_num = 0; void dfs(int x, int y) { if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) { return; } if (image[x][y] == 0 || label[x][y] != 0) { return; } label[x][y] = label_num; dfs(x-1, y); dfs(x+1, y); dfs(x, y-1); dfs(x, y+1); } int main() { for (int i = 0; i < WIDTH; i++) { for (int j = 0; j < HEIGHT; j++) { if (image[i][j] == 1 && label[i][j] == 0) { label_num++; dfs(i, j); } } } for (int i = 0; i < WIDTH; i++) { for (int j = 0; j < HEIGHT; j++) { printf("%d ", label[i][j]); } printf("\n"); } return 0; } ``` 这段代码中,我们定义了一个10x10的二值化图像,其中“1”表示前景像素,而“0”表示背景像素。我们使用一个二维数组`label`来保存每个像素的标记值,初始时所有像素的标记值都为0。接下来,我们通过遍历每个像素,找到前景像素并对其进行标记。具体的标记方法是使用深度优先搜索(DFS)算法,对每个前景像素进行搜索,将其标记为一个新的连通域,并且递归搜索其相邻的前景像素。最终,我们将标记后的二维数组`label`输出到控制台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值