学习OpenCV——计算邻接区域列表(build_adjoin)
来源:互联网 发布:苹果软件购买记录 编辑:程序博客网 时间:2024/05/19 20:59
最近遇到一个问题,就是在图像分割完成后,需要把相邻的区域都列出来用于下一步计算,也就是说,我需要找到与任意一个区域相邻的所有区域。最后在XX的启发下终于完成,主要就是:
1. 初始化每个像素有8条edge,分别连接相邻的元素;
2. 计算所有edge指向的元素是否属于同一个region,如果属于放弃,如果不属于,则存放在一个regNum*regNum大小的Mat中;
代码:
#include "stdafx.h"#include "build_adjoin.h"typedef struct {float w;int a, b;} edge;Mat build_adjoin(Mat Idx,int IdNum){int width(Idx.cols),height(Idx.rows);edge *edges = new edge[width*height*4];int num = 0;//添加边界,构造邻接区域矩阵;{for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (x < width-1) {edges[num].a = Idx.at<int>(y,x);edges[num].b = Idx.at<int>(y,x+1);num++;}if (y < height-1) {edges[num].a = Idx.at<int>(y,x);edges[num].b = Idx.at<int>(y+1,x);num++;}if ((x < width-1) && (y < height-1)) {edges[num].a = Idx.at<int>(y,x);edges[num].b = Idx.at<int>(y+1,x+1);num++;}if ((x < width-1) && (y > 0)) {edges[num].a = Idx.at<int>(y,x);edges[num].b = Idx.at<int>(y-1,x+1);num++;}}}}//构造邻接矩阵,宽和高都是id数量,当两个id代表的区域相邻,则他们在adjoin中的值!=0;Mat adjoin(IdNum,IdNum,CV_32SC1);adjoin.setTo(0);for (int i=0;i!=num;i++){int x = edges[i].a;int y = edges[i].b;if(x != y)adjoin.at<int>(y,x)=255;}return adjoin;}
- 学习OpenCV——计算邻接区域列表(build_adjoin)
- OpenCV学习——物体跟踪的粒子滤波算法实现之计算选定区域直方图
- OpenCV学习——ROI区域
- OpenCV学习——子区域处理
- OpenCV学习——ROI区域
- opencv深入学习(5)—ROI区域
- 【OpenCV学习】计算两幅图像的重叠区域
- 学习OpenCV——Max_Area寻找最大区域
- 学习OpenCV——Max_Area寻找最大区域
- 学习OpenCV——肤色检测:椭圆模型 (&最大连通区域)
- opencv学习之感兴趣区域(ROI)
- opencv--学习之感兴趣区域(ROI)
- OpenCV学习笔记(1)—计算程序运行时间
- 有关opencv的学习(9)—计算图像直方图
- opencv 读取图像区域 并 计算HOG
- 【OpenCV学习笔记】【函数学习】十九(感兴趣区域)
- opencv学习-定义感兴趣区域
- 车牌区域定位——opencv
- hdu 3233 Download Manager(模拟题)
- uva147 - Dollars-------水题(精度注意)
- 那时,我们正年轻
- java多线程编程的常见陷阱(转~~)
- C# 登录QQ网站并获取QQ相关信息
- 学习OpenCV——计算邻接区域列表(build_adjoin)
- SQLServer中的@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT
- 简单内存泄漏检测方法 解决 Detected memory leaks
- Perl 的线程中的共享
- 为何使用Shell脚本
- 高仿QQ2012界面-支持Aero特效和界面动画
- Eclipse快捷键一览
- 如何刷新弹出窗口父窗口,关闭弹出窗口
- 和菜鸟一起学linux之container_of实例