最近遇到一个问题,就是在图像分割完成后,需要把相邻的区域都列出来用于下一步计算,也就是说,我需要找到与任意一个区域相邻的所有区域。最后在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)相关推荐

  1. opencv计算指定区域黑白像素占比

    如下在我们拿到二值化的图像之后,想要计算红框内黑白像素在该区域的占比.注意单通道的图像无法出现黑白以外的颜色. 上图为我们拿到的红色区域二值化之后的图像.我们通过遍历该区域所有像素来判断.若值为255 ...

  2. 学习kaneboy的 sps区域列表的管理入口程序

    昨天,打开kaneboy提供的一个用于为sps区域中的列表提供权限管理入口的代码.发现他的程序里面的原理很简单. 在wss站点中,每个文档库.每个列表都会有权限设置,而这个权限设置界面的入口是一个链接 ...

  3. OpenCV计算指定区域的黑白像素个数

    过程模拟模板匹配过程,可修改成模板匹配方式: 过程:读取一张图片->从图片中选取感兴趣区域(ROI),并保存->把保存下来的区域图片(ROI)读取出来->预处理后计算黑白像素的个数 ...

  4. opencv利用矩形框选中某一区域_【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4

    经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分 ...

  5. 学习Opencv+Python之银行卡卡号识别

    学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...

  6. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  7. opencv4 c++ 提取图片中的白色区域_修正!【从零学习OpenCV 4】分割图像——分水岭法...

    点击上方"小白学视觉",选择"星标"公众号重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开 ...

  8. opencv4 c++ 提取图片中的白色区域_【从零学习OpenCV 4】形态学应用

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】轮廓面积与长度

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  10. 深度学习 + OpenCV,Python实现实时视频目标检测

    选自PyimageSearch 机器之心编译 参与:路雪.李泽南 使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加 ...

最新文章

  1. AI聚变:寻找2018最佳人工智能应用案例
  2. 查看并开启MySQL的log-bin和general_log日志
  3. 思考问题的“六顶帽子”
  4. python输入一个字母_python – Tkinter输入的第一个字母
  5. 如何用c语言倒序输出字母,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
  6. 《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能
  7. 计算机课Word自我介绍,第5课 用WORD写篇自我介绍.doc
  8. android listview的理解,Android ListView的理解
  9. Windows Server 2012 +WDK7600.16385.1+VS2008驱动开发环境搭建
  10. 【转】 TechED2010与我(三) —— 初识云计算
  11. 阿里云服务器安装docker开发环境
  12. PCM格式音频数据的读取
  13. 电脑没有声音怎么安装声卡驱动?驱动人生声卡驱动安装失败原因
  14. 回弹强度记录表填写_回弹法检测砼抗压强度原始记录表(2011年规程)
  15. Android ActivityManager类
  16. 如何解决手机retina显示屏下的1px太粗问题
  17. 平安人寿保险-深圳Java开发工程师社招面试
  18. java.lang.ExceptionInInitializerError异常
  19. 安装指定版本Kubernetes
  20. 04_NetBean安裝

热门文章

  1. 空间里相片批量导入u盘_怎样将U盘内相片弄到QQ空间的相册内
  2. HTML5期末考核大作业:华为官网 ( 2页带轮播图)
  3. STM8S系列基于STVD开发,标准外设库函数开发环境搭建
  4. 空集有四种写法,你知道么?——常用Latex符号表来啦!
  5. 移动通信网络规划:多址技术
  6. 推荐一款文献管理工具 Zotero |附使用教程和学习路径
  7. 也谈谈如何胜任中小型公司的技术总监
  8. 正点原子i.mx6ullMini开发板用SPI驱动RC522门禁卡模块
  9. 温故知新(七七)nextTick 是在本次循环执行,还是在下次,setTimeout(()=>{},0)呢
  10. python 解决Fatal error in launcher:错误问题