1. 程式人生 > >opencv分水嶺分割演算法C++是

opencv分水嶺分割演算法C++是

#include #include #include #include #include "watershedsegmenter.h"using namespace std;using namespace cv;int main(){ // Read input image 原圖 Mat image= imread("/home/osksh/skin_c/dulani_anuradha4.jpg"); if (!image.data) return 0; // Display the image namedWindow("Original Image"); imshow("Original Image",image); Mat binary,fg,bg; cvtColor(image,binary,CV_RGBA2GRAY); //Display the binary image namedWindow("Binary Image"); imshow("Binary Image",binary); // 由二值影象獲得前景。腐蝕。移除噪點與微小物體 erode(binary,fg,cv::Mat(),cv::Point(-1,-1),6); // Display the foreground image namedWindow("Foreground Image"); imshow("Foreground Image",fg); //膨脹二值圖來獲取背景(只有草地,沒有樹林) dilate(binary,bg,cv::Mat(),cv::Point(-1,-1),6); threshold(bg,bg,150,128,cv::THRESH_BINARY_INV); //最後一個引數的表示 ifsrc>1,dst=0,else dst=128。這樣就使背景全為灰色(128) // Display the background image namedWindow("Background Image"); imshow("Background Image",bg); // Show markers image Mat markers(binary.size(),CV_8U,cv::Scalar(0)); markers= fg+bg;//使用過載操作符+ namedWindow("Markers"); imshow("Markers",markers); // Create watershed segmentation object WatershedSegmenter segmenter; // Set markers and process segmenter.setMarkers(markers); segmenter.process(image); // Display segmentation result namedWindow("Segmentation"); imshow("Segmentation",segmenter.getSegmentation()); // Display watersheds namedWindow("Watersheds"); imshow("Watersheds",segmenter.getWatersheds()); waitKey(0); return 0;}