通过opencv删除图像上的去聚焦区域

通过opencv删除图像上的去聚焦区域,opencv,image-processing,focus,feature-detection,Opencv,Image Processing,Focus,Feature Detection,我有一个图像和两个区域(聚焦区域和去聚焦区域)。我使用开放CV,我想检测附近区域。 我在OpenCV或Canny检测器中应用分水岭来检测对象。但物体包括近区和远区 所以,我需要任何人的想法或帮助,帮助我应用OpenCV检测近区域图像 显示图像的代码,我附加 private Mat CalculateMapStrength(Mat inputMat){ Imgproc.cvtColor(inputMat,inputMat, Imgproc.COLOR_RGBA2GRAY); //C

我有一个图像和两个区域(聚焦区域和去聚焦区域)。我使用开放CV,我想检测附近区域。 我在OpenCV或Canny检测器中应用分水岭来检测对象。但物体包括近区和远区

所以,我需要任何人的想法或帮助,帮助我应用OpenCV检测近区域图像

显示图像的代码,我附加

private Mat CalculateMapStrength(Mat inputMat){
    Imgproc.cvtColor(inputMat,inputMat, Imgproc.COLOR_RGBA2GRAY);
    //Compute dx and dy derivatives
    Mat dx = new Mat();
    Mat dy = new Mat();
    Imgproc.Sobel(inputMat, dx, CV_32F, 1, 0);
    Imgproc.Sobel(inputMat, dy, CV_32F, 0, 1);
    Core.convertScaleAbs(dx,dx);
    Core.convertScaleAbs(dy,dy);
    Mat outputMat = new Mat();
    Core.addWeighted(dx,0.5,dy,0.5,0,outputMat);
    return outputMat;
}
另外,在OpenCV中,利用分水岭算法对图像进行分割。我可以为检测对象编译2个结果吗?如何编译

public Mat steptowatershed(Mat img)
{
    Mat threeChannel = new Mat();
    Imgproc.cvtColor(img, threeChannel, Imgproc.COLOR_BGR2GRAY);
    Imgproc.threshold(threeChannel, threeChannel, 100, 255, Imgproc.THRESH_BINARY);
    Mat fg = new Mat(img.size(),CvType.CV_8U);
    Imgproc.erode(threeChannel,fg,new Mat());
    Mat bg = new Mat(img.size(),CvType.CV_8U);
    Imgproc.dilate(threeChannel,bg,new Mat());
    Imgproc.threshold(bg,bg,1, 128,Imgproc.THRESH_BINARY_INV);
    Mat markers = new Mat(img.size(),CvType.CV_8U, new Scalar(0));
    Core.add(fg, bg, markers);
    Mat result1=new Mat();
    WatershedSegmenter segmenter = new WatershedSegmenter();
    segmenter.setMarkers(markers);
    Imgproc.cvtColor(img, img, Imgproc.COLOR_RGBA2RGB);
    result1 = segmenter.process(img);
    return result1;
}

public class WatershedSegmenter
{
    public Mat markers=new Mat();
    public void setMarkers(Mat markerImage)
    {
        markerImage.convertTo(markers, CvType.CV_32SC1);
    }
    public Mat process(Mat image)
    {
        Imgproc.watershed(image,markers);
        markers.convertTo(markers,CvType.CV_8U);
        return markers;
    }
}

请发布您的代码以帮助他人帮助您。另请参见:。我刚刚更新了我攻击的show image的函数。现在,我可以通过OpenCV的Canny检测功能检测边缘。但是,我不知道如何去除图像中的远区,我使用阈值来去除去焦对象。但我不能结合两个结果来获得图像的焦点区域。有人能帮我吗?谢谢