[英]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.