分水嶺演算法 Kinect V2開發學習 3

2021-09-13 21:47:21 字數 3311 閱讀 3612

#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.求取影象的邊界...