91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 30KB
    文件類型: .zip
    金幣: 2
    下載: 1 次
    發布日期: 2021-12-11
  • 語言: 其他
  • 標簽: GrabCut??

資源簡介

GrabCut源代碼實現以及BorderMatting的實現

資源截圖

代碼片段和文件信息

#include?“BorderMatting.h“
BorderMatting::BorderMatting(){}
BorderMatting::~BorderMatting(){}
//判斷x是否在l和r直接。
inline?bool?outrange(int?_x?int?_l?int?_r){
if?(_x<_l?||?_x>_r) return?true;
else?return?false;
}
//變量初始化。
void?BorderMatting::init(const?Mat&?_img){
rows?=?_img.rows;
cols?=?_img.cols;
sections?=?0;
areaCount?=?0;
contour.clear();
strip.clear();
vecds.clear();
}
//利用?Canny?算法進行邊緣檢測,結果存放在?_rs?中。
void?BorderDetection(const?Mat&?_img?Mat&?_rs){
Mat?edges;
Canny(_img?edges?3?9);
edges.convertTo(_rs?CV_8UC1);
}
//深度優先搜索遍歷整個輪廓,并對?contour?進行構造。
void?BorderMatting::dfs(int?_x?int?_y?const?Mat&?_edge?Mat&?_color){
//標記遍歷到的點
_color.at(_x?_y)?=?255;
para_point?pt;
pt.p.x?=?_x;?pt.p.y?=?_y;?//坐標
pt.index?=?areaCount++;//給輪廓上每一個點分配獨立index
pt.section?=?sections;//所屬輪廓
contour.push_back(pt);?//放入輪廓vector
//枚舉(xy)相鄰點
for?(int?i?=?0;?i? int?zx?=?nx[i]?zy?=?ny[i];
int?newx?=?_x?+?zx?newy?=?_y?+?zy;
//超出圖像范圍
if?(outrange(newx?0?rows?-?1)?||?outrange(newy?0?cols?-?1))?continue;
//不是輪廓上的點
if?(_edge.at(newx?newy)?==?0)continue;
//已經被遍歷過
if?(_color.at(newx?newy)?!=?0)continue;
//從(newxnewy)出發,繼續深搜遍歷輪廓
dfs(newx?newy?_edge?_color);
}
}
//利用深度優先搜索對輪廓進行參數計算。
void?BorderMatting::ParameterizationContour(const?Mat&?_edge)
{
int?rows?=?_edge.rows?cols?=?_edge.cols;
sections?=?0;?
areaCount?=?0;?
//遍歷標記
Mat?color(_edge.size()?CV_8UC1?Scalar(0));
bool?flag?=?false;
for?(int?i?=?0;?i? for?(int?j?=?0;?j? //(ij)是輪廓上的點且未被遍歷過
if?(_edge.at(i?j)?!=?0?&&?color.at(i?j)?==?0){
//對其進行遍歷并使輪廓數加一
dfs(i?j?_edge?color);
sections++;
}
}
//初始化TU,用無序圖來存儲,hash?值就是其坐標值。
void?BorderMatting::StripInit(const?Mat&?_mask){
Mat?color(_mask.size()?CV_32SC1?Scalar(0));//遍歷標記
//從輪廓出發,寬搜標記TU,標記TU所屬區域————對應的中心輪廓點
//初始化隊列:加入輪廓上所有點
vector?queue;
for?(int?i?=?0;?i? inf_point?ip;
ip.p?=?contour[i].p;?//坐標
ip.dis?=?0;?//距離中心點的歐氏距離
ip.area?=?contour[i].index;?//所屬區域
strip[ip.p.x*COE?+?ip.p.y]?=?ip;?//將點加入條帶,key(hash)值為其坐標
queue.push_back(ip.p);?//將點加入隊列
color.at(ip.p.x?ip.p.y)?=?ip.area?+?1;?//遍歷標記:區域號+1
}
//寬搜遍歷TU,將
int?l?=?0;
while?(l? point?p?=?queue[l++];?//取出點
inf_point?ip?=?strip[p.x*COE?+?p.y];?//從strip中得到相關信息
//只遍歷TU內的點
if?(abs(ip.dis)?>=?stripwidth)?break;
int?x?=?ip.p.x?y?=?ip.p.y;
//枚舉相鄰點
for?(int?i?=?0;?i? int?newx?=?x?+?rx[i]?newy?=?y?+?ry[i];
//超出圖像范圍
if?(outrange(newx?0?rows?-?1)?||?outrange(newy?0?cols?-?1)) continue;
inf_point?nip;
//如果已經被遍歷過
if?(color.at(newx?newy)?!=?0) continue;
else?nip.p.x?=?newx;?nip.p.y?=?newy;
nip.dis?=?abs(ip.dis)?+?1;//歐式距離+1
//如果該點屬于背景,歐氏距離取負
if?((_mask.at(newx?newy)?&?1)?!=?1)?nip.dis?=?-nip.dis;
nip.area?=?ip.area;
//加入TU中。

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????7220??2010-01-25?12:00??block.h
?????文件???????12564??2017-06-10?22:09??BorderMatting.cpp
?????文件????????2665??2017-06-08?07:51??BorderMatting.h
?????文件?????????708??2017-06-06?18:58??CutGraph.cpp
?????文件?????????337??2017-06-06?18:57??CutGraph.h
?????文件????????5598??2017-06-08?07:52??GCApplication.cpp
?????文件????????1943??2017-06-08?07:53??GCApplication.h
?????文件????????5991??2017-06-07?23:28??GMM.cpp
?????文件????????1948??2017-06-07?23:00??GMM.h
?????文件????????9815??2017-06-10?21:38??GrabCut.cpp
?????文件?????????451??2017-06-07?13:19??GrabCut.h
?????文件????????2916??2010-01-25?12:00??graph.cpp
?????文件???????17233??2010-01-25?12:00??graph.h
?????文件?????????394??2010-01-25?12:00??instances.inc
?????文件????????2207??2017-06-08?07:52??main.cpp
?????文件???????14887??2010-01-25?12:00??maxflow.cpp
?????文件?????????363??2017-06-11?09:07??README.md

評論

共有 條評論