图斑合并过程求边界
来源:互联网 发布:成都管家婆软件 编辑:程序博客网 时间:2024/05/01 14:16
图像分割中的多尺度分析:图斑合并过程中合并后的图斑边界也会变化,需要实时计算更新后的图斑边界,计算过程大致为先得到合并图斑的掩膜,利用掩膜计算合并图斑边界。以下算法本人自己实现的,结果可以获得图斑所有边界,但是无法计算边界数量与边界之间的关系(边界之间的层次关系,类似opencv里findContours里的level 0 ,level 1这样的),但是对于合并图斑来说,其掩膜为有且只有一个边界的封闭连通区域,能够满足要求。
函数实现:
void findBoundary(cv::Mat &mask,std::vector<cv::Point> &boundary){int height=mask.rows;int width=mask.cols;for ( int x=0;x<width;x++ ){for ( int y=0;y<height;y++ ){int curvalue=mask.at<uchar>(y,x);if ( curvalue!=0 ){if ( x==0 || x==width-1 || y==0 || y==height-1 ){boundary.push_back(Point(x,y));}else{//4邻域if ( mask.at<uchar>(y,x-1)==0 || mask.at<uchar>(y,x+1)==0 || mask.at<uchar>(y-1,x)==0 || mask.at<uchar>(y+1,x)==0){ boundary.push_back(Point(x,y)); }}}}}}此处利用一个小实验来测试该函数:
#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"using namespace cv;using namespace std;int main(){cv::Mat mask;//create buffer along the contourstd::vector<cv::Point> boundary; mask=imread("test.png");cvtColor(mask,mask,CV_BGR2GRAY);// accept only char type matrices CV_Assert( mask.depth() == CV_8U );// accept only gray scale matricesCV_Assert( mask.channels() == 1 );findBoundary(mask,boundary);Mat end=cv::Mat::zeros(mask.rows,mask.cols,CV_8UC1);for (std::vector< cv::Point >::const_iterator it=boundary.begin();it!=boundary.end();it++){ end.at<uchar>(*it)=255; }imwrite("end.jpg",end);return 0;}实验图像:
测试结果:
0 0
- 图斑合并过程求边界
- HTML&CSS之边界合并和边界溢出
- 递归建立图斑边界缓冲区
- 系统边界图
- 边界
- gcc 链接合并过程
- 求数列合并最小代价
- 合并算法求逆序对
- table进行合并,求合计
- 边界,边界,还是边界
- ORACLE储存过程合并数组
- FSImage和EditsLog合并过程
- 求逆序对个数(合并排序)
- 求一个合并数据的命令
- 合并石子(求最小代价)
- 2.24 边界,边界,还是边界
- Photoshop脚本 > 查看图层边界信息
- 从深度图里面导出边界
- PAT Perfect Sequence (25)
- No space left on device svn: Commit failed (details follow): svn: Can't flush file '/srv/tsocsvn/ts
- 在海量数据中统计出现次数最多的n个
- 新GRE填空备考--双空PK三空--法
- 断言 IOS
- 图斑合并过程求边界
- C++对象内存模型---数据封装
- java实现各种排序算法及比较
- spring mvc 基于maven的完整demo
- PAT Rational Arithmetic (20)
- 九度OJ-题目1367:二叉搜索树的后序遍历序列
- CocoaPods使用说明
- 合并excel 宏文件
- SAT语法--介绍两大必考从句