精华内容
下载资源
问答
  • 分水岭分割算法

    2018-04-19 10:54:20
    用MATLAB对图片进行分水岭分割算法
  • 自适应梯度重建分水岭分割算法
  • matlab 分水岭分割算法

    2017-07-28 09:57:10
    matlab分水岭分割算法实例,内涵有实测数据,亲测可用!
  • 分水岭分割算法程序

    2011-10-23 00:05:56
    分水岭分割算法程序,试验过,效果很好!分水岭分割算法程序,试验过,效果很好!
  • opencv分水岭分割算法

    2014-03-27 09:33:27
    opencv下实现的图像分水岭分割算法的源代码。
  • 图像处理中的标记分水岭分割算法 如果图像中的目标物体是连接在一起的则分割起来会更困难分 水岭分割算法经常用于处理这类问题通常会取得比较好的效果分 水岭分割算法把图像看成一幅 地形图其中亮度比较强的区域 ...
  • Watershed分水岭分割算法,学习一下吧哈哈哈
  • 分水岭分割算法原理与代码分水岭分割算法原理与代码分水岭分割算法原理与代码
  • 参考网上资源写的一个课程作业(分水岭分割算法),初步实现分水岭分割算法处理图片,配置环境是:win8.1+vs2015+opencv3.2.0。
  • 内容索引:VC/C++源码,图形处理,分水岭,分割算法 VC++图像分水岭分割算法控件及示例源代码,在Photoshop里会看到这种效果,程序可能还有不完善的地方,有时候会出现内存不足的提示,不过整体感觉程序写的还是不错的...
  • 一种采用模板预分割的分水岭分割算法,姜雪峰,王毅,本文提出了一种改进的分水岭分割方法。先利用灰度直方图的阈值自动提取方法,通过用模板对图像进行预分割,得到具有一定意义的边
  • matlab实现图像分水岭分割算法并且有改进的算法实现,两者相互比较效果,并且文档最后直接复制了全部的实现代码
  • OpenCV分水岭分割算法

    千次阅读 2017-02-16 21:50:44
    OpenCV分水岭分割算法 参考文章的地址: OpenCV学习之分水岭算法:http://www.cnblogs.com/mikewolf2002/p/3304713.html 1、代码实现 #include #include using namespace std; using namespace cv; int main() {...
    
    

    OpenCV分水岭分割算法

    参考文章的地址:

    OpenCV学习之分水岭算法:http://www.cnblogs.com/mikewolf2002/p/3304713.html

    1、代码实现

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    int main()
    {
    	// 打开另一幅图像 
    	Mat  image=imread("E:\\图库\\tower.jpg"); 
    	if (!image.data) 
    			cout<<"不能打开图像!"<<endl; 
    		return 0; 
    	}
    	imshow("原图",image);
    	// 标示背景图像 
    	Mat imageMask(image.size(),CV_8U,cv::Scalar(0));
    
    	rectangle(imageMask,Point(1,1),Point(image.cols-2,image.rows-2),Scalar(255),1); // 表示塔
    	 
    	rectangle(imageMask,Point(image.cols/2-10,image.rows/2-10), Point(image.cols/2+10,image.rows/2+10),cv::Scalar(64),10); 
    	//树 
    	rectangle(imageMask,Point(64,284), Point(68,300),Scalar(128),5);
    	
    	imshow("添加标记",imageMask);
    	imageMask.convertTo(imageMask,CV_32S);
    	
    	// 设置marker和处理图像  
    	watershed(image,imageMask);
    
    	Mat mark1; 
    	imageMask.convertTo(mark1,CV_8U); 
    	namedWindow("marker");
    
    	imshow("marker",mark1);
    	imageMask.convertTo(imageMask,CV_8U,255, 255);
    	imshow("分水岭线",imageMask);
    	waitKey(0);
    	return 0;
    }

    运行结果


    展开全文
  • OpenCV watershed分水岭分割算法的实例OpenCV watershed分水岭分割算法的实例 OpenCV watershed分水岭分割算法的实例 #include <opencv2/core/utility.hpp> #include "opencv2/imgproc.hpp" #include "opencv2...

    OpenCV watershed分水岭分割算法的实例

    OpenCV watershed分水岭分割算法的实例

    #include <opencv2/core/utility.hpp>
    #include "opencv2/imgproc.hpp"
    #include "opencv2/imgcodecs.hpp"
    #include "opencv2/highgui.hpp"
    
    #include <cstdio>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    static void help(char** argv)
    {
        cout << "\nThis program demonstrates the famous watershed segmentation algorithm in OpenCV: watershed()\n"
                "Usage:\n" << argv[0] <<" [image_name -- default is fruits.jpg]\n" << endl;
    
    
        cout << "Hot keys: \n"
            "\tESC - quit the program\n"
            "\tr - restore the original image\n"
            "\tw or SPACE - run watershed segmentation algorithm\n"
            "\t\t(before running it, *roughly* mark the areas to segment on the image)\n"
            "\t  (before that, roughly outline several markers on the image)\n";
    }
    Mat markerMask, img;
    Point prevPt(-1, -1);
    
    static void onMouse( int event, int x, int y, int flags, void* )
    {
        if( x < 0 || x >= img.cols || y < 0 || y >= img.rows )
            return;
        if( event == EVENT_LBUTTONUP || !(flags & EVENT_FLAG_LBUTTON) )
            prevPt = Point(-1,-1);
        else if( event == EVENT_LBUTTONDOWN )
            prevPt = Point(x,y);
        else if( event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON) )
        {
            Point pt(x, y);
            if( prevPt.x < 0 )
                prevPt = pt;
            line( markerMask, prevPt, pt, Scalar::all(255), 5, 8, 0 );
            line( img, prevPt, pt, Scalar::all(255), 5, 8, 0 );
            prevPt = pt;
            imshow("image", img);
        }
    }
    
    int main( int argc, char** argv )
    {
        cv::CommandLineParser parser(argc, argv, "{help h | | }{ @input | fruits.jpg | }");
        if (parser.has("help"))
        {
            help(argv);
            return 0;
        }
        string filename = samples::findFile(parser.get<string>("@input"));
        Mat img0 = imread(filename, 1), imgGray;
    
        if( img0.empty() )
        {
            cout << "Couldn't open image ";
            help(argv);
            return 0;
        }
        help(argv);
        namedWindow( "image", 1 );
    
        img0.copyTo(img);
        cvtColor(img, markerMask, COLOR_BGR2GRAY);
        cvtColor(markerMask, imgGray, COLOR_GRAY2BGR);
        markerMask = Scalar::all(0);
        imshow( "image", img );
        setMouseCallback( "image", onMouse, 0 );
    
        for(;;)
        {
            char c = (char)waitKey(0);
    
            if( c == 27 )
                break;
    
            if( c == 'r' )
            {
                markerMask = Scalar::all(0);
                img0.copyTo(img);
                imshow( "image", img );
            }
    
            if( c == 'w' || c == ' ' )
            {
                int i, j, compCount = 0;
                vector<vector<Point> > contours;
                vector<Vec4i> hierarchy;
    
                findContours(markerMask, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
    
                if( contours.empty() )
                    continue;
                Mat markers(markerMask.size(), CV_32S);
                markers = Scalar::all(0);
                int idx = 0;
                for( ; idx >= 0; idx = hierarchy[idx][0], compCount++ )
                    drawContours(markers, contours, idx, Scalar::all(compCount+1), -1, 8, hierarchy, INT_MAX);
    
                if( compCount == 0 )
                    continue;
    
                vector<Vec3b> colorTab;
                for( i = 0; i < compCount; i++ )
                {
                    int b = theRNG().uniform(0, 255);
                    int g = theRNG().uniform(0, 255);
                    int r = theRNG().uniform(0, 255);
    
                    colorTab.push_back(Vec3b((uchar)b, (uchar)g, (uchar)r));
                }
    
                double t = (double)getTickCount();
                watershed( img0, markers );
                t = (double)getTickCount() - t;
                printf( "execution time = %gms\n", t*1000./getTickFrequency() );
    
                Mat wshed(markers.size(), CV_8UC3);
    
                // paint the watershed image
                for( i = 0; i < markers.rows; i++ )
                    for( j = 0; j < markers.cols; j++ )
                    {
                        int index = markers.at<int>(i,j);
                        if( index == -1 )
                            wshed.at<Vec3b>(i,j) = Vec3b(255,255,255);
                        else if( index <= 0 || index > compCount )
                            wshed.at<Vec3b>(i,j) = Vec3b(0,0,0);
                        else
                            wshed.at<Vec3b>(i,j) = colorTab[index - 1];
                    }
    
                wshed = wshed*0.5 + imgGray*0.5;
                imshow( "watershed transform", wshed );
            }
        }
    
        return 0;
    }
    
    
    展开全文
  • 针对采用阈值分割算法分割图像时图像背景与孔洞存在粘连,背景存在干扰时分割效果不理想的情况,提出利用分水岭分割算法对图像进行初始分割,再选取合适的阈值对图像进行二次分割。上述方法均在VS2010上实现,编写图像...
  • 为了提高医学图像分割的准确性, 针对分水岭分割算法中的过分割问题, 提出了一种改进的医学图像分水岭分割算法。该算法首先在分水岭变换前进行预处理初步分割, 主要包括多尺度形态学滤波、多尺度梯度算子计算、自适应...
  • 改进的分水岭分割算法在遥感图像分割中的应用,顿德光,,为了解决分水岭算法造成的过度分割及二值化阈值选择问题,本文提出了一种新的算法。首先利用数学形态学算法对图像进行增强处理,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,127
精华内容 450
关键字:

分水岭分割算法