分水岭图像分割JavaCv,分割没有发生

Watershed image segmentation JavaCv, Segmentation not taking place

您好,我正在使用 javacv,说真的,我不知道我陷入了什么困境。我以某种方式设法编写了 运行 代码,但我不知道为什么结果与分水岭算法标题下此 link 中给出的示例不一致。 Example 这是我的代码,在示例中使用了相同的图像(道路图像)。这是我的代码,图像 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");
}

提前感谢您的帮助。

将图像转换为灰度后。取图像的平均值,然后将其转换为二进制。将进行分段,并且在倒数第二行注释的 grey 图像中可见。