使用分水岭算法对图像进行分割
来源:互联网 发布:单片机课设 编辑:程序博客网 时间:2024/06/05 06:27
#if !defined WATERSHS#define WATERSHS#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>class WatershedSegmenter { private: cv::Mat markers; public: void setMarkers(const cv::Mat& markerImage) {// Convert to image of intsmarkerImage.convertTo(markers,CV_32S); } cv::Mat process(const cv::Mat &image) {// Apply watershedcv::watershed(image,markers);return markers; } // Return result in the form of an image cv::Mat getSegmentation() { cv::Mat tmp;// all segment with label higher than 255// will be assigned value 255markers.convertTo(tmp,CV_8U);return tmp; } // Return watershed in the form of an image cv::Mat getWatersheds() {cv::Mat tmp;markers.convertTo(tmp,CV_8U,255,255);return tmp; }};#endif#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>#include "watershedSegmentation.h"int main(){// Read input imagecv::Mat image= cv::imread("d:/test/opencv/group.jpg");if (!image.data)return 0; // Display the imagecv::namedWindow("Original Image");cv::imshow("Original Image",image);// Get the binary mapcv::Mat binary;binary= cv::imread("d:/test/opencv/binary.bmp",0); // Display the binary imagecv::namedWindow("Binary Image");cv::imshow("Binary Image",binary);// Eliminate noise and smaller objectscv::Mat fg;cv::erode(binary,fg,cv::Mat(),cv::Point(-1,-1),6); // Display the foreground imagecv::namedWindow("Foreground Image");cv::imshow("Foreground Image",fg);// Identify image pixels without objectscv::Mat bg;cv::dilate(binary,bg,cv::Mat(),cv::Point(-1,-1),6);cv::threshold(bg,bg,1,128,cv::THRESH_BINARY_INV); // Display the background imagecv::namedWindow("Background Image");cv::imshow("Background Image",bg);// Show markers imagecv::Mat markers(binary.size(),CV_8U,cv::Scalar(0));markers= fg+bg;cv::namedWindow("Markers");cv::imshow("Markers",markers);// Create watershed segmentation objectWatershedSegmenter segmenter;// Set markers and processsegmenter.setMarkers(markers);segmenter.process(image);// Display segmentation resultcv::namedWindow("Segmentation");cv::imshow("Segmentation",segmenter.getSegmentation());// Display watershedscv::namedWindow("Watersheds");cv::imshow("Watersheds",segmenter.getWatersheds());cv::waitKey();return 0;}
0 0
- 使用分水岭算法对图像进行分割
- opencv分水岭算法对图像进行分割
- 0penCV_(Watershed Segmenter)使用 分水岭算法 对图像进行分割
- opencv-用分水岭算法进行图像分割
- 分水岭图像分割算法
- OpenCV2编程手册笔记之 5.5分水岭算法对图像进行分割
- 新手学,java使用分水岭算法进行图像分割(一)
- 新手学,java使用分水岭算法进行图像分割(二)
- OpenCV2 使用分水岭算法对图像分割的个人理解 cv::watershed()
- 图像分割 之 分水岭算法
- [转载]分水岭图像分割算法
- 图像分割之分水岭算法
- opencv8-图像分割-分水岭算法
- 用分水岭算法实现图像分割 (祝勇)
- matlab实现分水岭算法处理图像分割
- OpenCV 1 图像分割--分水岭算法代码
- 图像分割——分水岭算法
- 5.5用分水岭算法实现图像分割
- 股票分析系统
- 实用的实体类
- 储存过程中创建uuid方法
- java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
- 猴子吃桃(递归)
- 使用分水岭算法对图像进行分割
- java生成和读取文本文件(text)
- Node
- TQ2440驱动-hello world 模块
- Mysql列转行
- 解决位图失真-SetStretchBltMode
- Ural 1550 Dean's Pyramid 3
- socket与http的区别
- 界面跳转类似于qq音乐刚开始登录时跳出的图标