#include #include #include #include #include using namespace std;
using namespace cv;
#include "watershedsegmentation.h"
void delay(int a) }}
int main(int argc, char* ar**)
else
result = sensor->open();//開啟kinect
sleep(500);//等待500ms,保證kinect正確開啟
if (succeeded(result))
else
result = sensor->get_colorframesource(&source);//獲取colorframesource
if (succeeded(result))
else
source->get_framedescription(&description);//獲取幀格式描述
description->get_height(&height);//幀高度
description->get_width(&width);//幀寬度
description->get_bytesperpixel(&bytesperpixel);//每一畫素的大小,單位byte
cout << height << endl << width << endl << bytesperpixel << endl;
//sleep(15000);
//return -1;
result = source->openreader(&reader);//獲取彩色影象reader
if (succeeded(result))
else
mat colorimage(height, width, cv_8uc4); //建立mat,用來放彩色影象資料
nowframe = imread("now.jpg", imread_color); //當前幀彩色圖
cvtcolor(nowframe, nowframe_gray, cv_bgr2gray); //當前幀灰度圖
absdiff(nowframe_gray, firstframe_gray, difframe);
threshold(difframe, difframe, 50, 255, cv_thresh_binary);//閾值分割
imshow("image", firstframe); //顯示第一幀彩色圖
//imshow("test", difframe); //顯示差分結果
//分水嶺演算法
mat fg;
erode(difframe, fg, mat(), point(-1, -1), 4);
// 顯示前景影象
//namedwindow("foreground image");
//cv::imshow("foreground image", fg);
// 標識不含物體的影象畫素
mat bg;
dilate(difframe, bg, mat(), point(-1, -1), 4);
threshold(bg, bg, 1, 128, thresh_binary_inv);
// 顯示背景影象
//namedwindow("background image");
//imshow("background image", bg);
// 建立標記影象,黑色為不確定,白色為前景,灰色為背景
mat markers(difframe.size(), cv_8u, scalar(0));
markers = fg + bg;
// namedwindow("markers");
// imshow("markers", markers);
// 建立分水嶺分割類的物件
watershedsegmenter segmenter;
// 設定標記影象,然後進行分割
segmenter.setmarkers(markers);
segmenter.process(nowframe);
// 顯示分割結果
namedwindow("segmentation");
imshow("segmentation", segmenter.getsegmentation());
// 顯示分水嶺
namedwindow("watersheds");
imshow("watersheds", segmenter.getwatersheds());
} if (waitkey(40) > 0)//按任意鍵退出程式
break;
} reader->release(); //釋放指標
source->release();
sensor->close(); //sensor記得要先close再釋放
分水嶺演算法
分水嶺變換是一種流行的影象處理演算法,用於快速將影象分割成多個同質區域。分水嶺演算法的思想是 把影象看成乙個拓撲地貌,那麼同類區域就相當於陡峭邊緣內相對平坦的盆地。分水嶺演算法通過逐步增加水位,把地貌分割成多個部分 目前比較著名的有模擬泛洪和降水 降水 水先是匯集到海拔低的地區,慢慢填充這每乙個盆地...
分水嶺演算法
在許多實際應用中,我們需要分割影象,但無法從背景影象中獲得有用資訊。分水嶺演算法在這方面往往是非常有效的。此演算法可以將影象中的邊緣轉化成 山脈 將均勻區域轉化為 山谷 這樣有助於分割目標。分水嶺演算法,是一種基於拓撲理論的數學形態學的分割方法,其基本思想是把影象看作是測地學上的拓撲地貌,影象中每一...
分水嶺分割演算法
如果影象中的目標物體是連在一起的,則分割起來會更困難,分水嶺演算法經常用於處理這類問題,通常會取得比較好的效果。分水嶺分割演算法把影象看成一副 地形圖 其中亮度比較強的地區畫素值較大,而比較暗的地區畫素比較小,通過尋找 匯水盆地 和 分水嶺界限 對影象進行分割。步驟 1.讀取影象 2.求取影象的邊界...