您好我正在与javacv合作并且认真对待我并不知道我遇到了什么。我不知何故设法写了一个正在运行的代码,但我不知道为什么结果不是根据这个链接在分水岭算法下给出的例子。 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");
}
感谢您的帮助。
答案 0 :(得分:1)
将图像转换为灰度后。取图像的意思,然后将其转换为二进制。分段将在灰色图像中显示,并在最后一行注释。