分水岭算法不';无法提供我期望的结果| Java | OpenCV
我试图在这张图片中找到凹坑的中心 我使用了分水岭算法,我认为该算法用于在图像上查找凹坑,但结果图像对我没有任何用处。我正确地使用了这个算法吗?我应该用另一种方式吗?这是我的密码:分水岭算法不';无法提供我期望的结果| Java | OpenCV,java,opencv,image-processing,watershed,Java,Opencv,Image Processing,Watershed,我试图在这张图片中找到凹坑的中心 我使用了分水岭算法,我认为该算法用于在图像上查找凹坑,但结果图像对我没有任何用处。我正确地使用了这个算法吗?我应该用另一种方式吗?这是我的密码: public static void main (String args[]){ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat image = new Mat(); image=Imgcodecs.imread("
public static void main (String args[]){
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat image = new Mat();
image=Imgcodecs.imread("cellar.jpg");
if ( image == null) System.out.println("not working");
else System.out.println("ok");
Mat binaryImage = new Mat();
Imgproc.cvtColor(image, binaryImage, Imgproc.COLOR_BGR2GRAY);
Imgproc.threshold(binaryImage,binaryImage,0,255,Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);
Mat fg = new Mat(image.size(),CvType.CV_8U);
Imgproc.erode(binaryImage,fg,new Mat(),new Point(-1,-1),2);
Mat bg = new Mat(image.size(),CvType.CV_8U);
Imgproc.dilate(binaryImage,bg,new Mat(),new Point(-1,-1),3);
Imgproc.threshold(bg,bg,1, 128,Imgproc.THRESH_BINARY_INV);
Mat markers = new Mat(image.size(),CvType.CV_8U, new Scalar(0));
Core.add(fg, bg, markers);
if(markers==null) System.out.println("ojojoj");
else System.out.println("perfect");
WatershedSegmenter segmenter = new WatershedSegmenter();
segmenter.setMarkers(markers);
Mat result = segmenter.process(image);
Imgcodecs.imwrite("resultMat.png", result);
}
public class WatershedSegmenter{
public Mat markers;
public void setMarkers(Mat markerImage)
{
markers = new Mat();
markerImage.convertTo(markers, CvType.CV_32S);
}
public Mat process(Mat image)
{
Imgproc.watershed(image, markers);
markers.convertTo(markers,CvType.CV_8U);
return markers;
}
}
以下是结果图像:
感谢您的帮助:)您如何定义给定输入图像中的凹坑?我指的是类似于圆形的凹坑