У меня есть изображение книги. Я хочу извлечь только книгу. Я использовал 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();
}
}
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].