У меня есть изображение книги. Я хочу извлечь только книгу. Я использовал opencv canny для обнаружения краев. Теперь я хочу извлечь только книгу. Ниже приведено изображение, преобразованное в оттенки серого. * Второе изображение имеет тот же файл, что и расширение Chrome (в раскрывающемся списке нет доступных опций) - Ниже приведен мой код для обнаружения краев. Он написан на java. Я использовал последнюю версию opencv opencv-4.1.2-vc14_vc15. мой файл opencv dll является opencv_java412.dll

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package opencv_test_2;
import java.awt.Image;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.awt.*;
import java.awt.image.*;

/**
 *
 * @author ishan
 */
public class Opencv_test_2 {
 private static Mat src;
 private static final int MAX_LOW_THRESHOLD = 100;
    private static final int RATIO = 3;
    private static final int KERNEL_SIZE = 3;
    private static final Size BLUR_SIZE = new Size(3,3);
    private  int lowThresh = 0;
 
    private  Mat srcBlur = new Mat();
    private  Mat detectedEdges = new Mat();
    private  Mat dst = new Mat();
    
    /**
     * @param args the command line arguments
     */
      public static BufferedImage imageToBufferedImage(Image im) {
     BufferedImage bi = new BufferedImage
        (im.getWidth(null),im.getHeight(null),BufferedImage.TYPE_INT_RGB);
     Graphics bg = bi.getGraphics();
     bg.drawImage(im, 0, 0, null);
     bg.dispose();
     return bi;
  }
    private void update() {
      src = Imgcodecs.imread("C:\\Users\\ishan\\Documents\\NetBeansProjects\\opencv_test_2\\src\\opencv_test_2\\book_2.jpg");
        if (src.empty()) {
            System.out.println("Empty image ");
            System.exit(0);
        }
        
         Imgproc.blur(src, srcBlur, BLUR_SIZE);
        Imgproc.Canny(srcBlur, detectedEdges, 25, 25 * RATIO, KERNEL_SIZE, false);
        dst = new Mat(src.size(), CvType.CV_8UC3, Scalar.all(0));
        src.copyTo(dst, detectedEdges);
        Image img = HighGui.toBufferedImage(dst);
              
        BufferedImage bm=imageToBufferedImage( img);
          Imgcodecs imageCodecs = new Imgcodecs(); 
         imageCodecs.imwrite("C:\\Users\\ishan\\Documents\\NetBeansProjects\\opencv_test_2\\src\\opencv_test_2\\border.jpg", dst); 
      System.out.println("Image Saved ............"); 
        
    }
    
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Opencv_test_2 op=new Opencv_test_2();
       op.update();
       
        
    }
    
}
0
ISHAN KALANSOORIYA