分水岭图像分割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 图像中可见。
您好,我正在使用 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 图像中可见。