繁体   English   中英

分水岭图像分割JavaCv,分割未发生

[英]Watershed image segmentation JavaCv, Segmentation not taking place

嗨,我正在与javacv一起工作,认真地说,我不知道我陷入了什么。 我以某种方式设法编写了一个正在运行的代码,但是我不知道为什么结果不按照该链接在“分水岭算法”标题下给出的示例给出。 示例 ,这是我的示例中使用的具有相同图像的代码(道路图像)。 这是我的代码,图像w.jpg是没有白色标记的图像,而w_markers.jpg是带有这些标记的图像。 我得到的结果只是w.jpg一点都没有改变。

    public static void doWatershed(){
    IplImage sample = null, marker= null;
    sample = cvLoadImage("C:\\Users\\Areeb\\Desktop\\w.jpg");
    marker = cvLoadImage("C:\\Users\\Areeb\\Desktop\\w_markers.jpg");
    IplImage newImage = cvCreateImage(cvGetSize(sample), IPL_DEPTH_8U, 3);
    cvCopy(sample, newImage);
    IplImage GrayImage = cvCreateImage(cvGetSize(sample), IPL_DEPTH_8U, 1);     
    cvCvtColor(sample, GrayImage, CV_BGR2GRAY);
    //ShowImage(GrayImage, "GrayImage", 512);

    IplImage BWImage = cvCreateImage(cvGetSize(GrayImage), IPL_DEPTH_8U, 1); 
    cvThreshold(GrayImage, BWImage, 127, 255, CV_THRESH_BINARY);


    IplImage fg = cvCreateImage(cvGetSize(GrayImage), IPL_DEPTH_8U, 1); 
    cvErode(GrayImage, fg, null, 2);
    IplImage bg = cvCreateImage(cvGetSize(GrayImage), IPL_DEPTH_8U, 1); 
    cvDilate(GrayImage, bg, null, 3);
    cvThreshold(bg, bg, 100, 255, CV_THRESH_BINARY_INV);
    IplImage markerscpp = cvCreateImage(cvGetSize(GrayImage), IPL_DEPTH_8U, 1); 

    cvAdd(fg, bg, markerscpp,null);
    ShowImage(markerscpp, "markers");

    IplImage grey32 = cvCreateImage(cvGetSize(markerscpp), IPL_DEPTH_32S, 1);
    cvConvert(markerscpp, grey32);
    System.out.print(marker.sizeof()+" : "+GrayImage.sizeof());
    cvWatershed(newImage, grey32);
    //ShowImage(grey32, "Grey");
    ShowImage(newImage, "Watershed");
}

我在这里先向您的帮助表示感谢。

将图像转换为灰度后。 取图像的平均值,然后将其转换为二进制。 分割将发生,并且对于在最后第二行中注释的灰度图像将是可见的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM