Cara mengenal pasti dengan tepat meterai rasmi yang sebenar pada kontrak menggunakan teknologi Java
2.1. Penduaan imej
Imej kontrak biasanya berwarna, tetapi meterai rasmi biasanya hitam dan putih. Oleh itu, kita perlu menukar imej berwarna kepada imej binari untuk mengekstrak ciri-ciri meterai rasmi dengan lebih baik. Ini boleh dicapai menggunakan fungsi perduaan dalam perpustakaan OpenCV:
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class ImageBinarization { public static void main(String[] args) { // 加载OpenCV库 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 读取合同图像 Mat image = Imgcodecs.imread("contract.jpg"); // 转换为灰度图像 Mat grayImage = new Mat(); Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_BGR2GRAY); // 二值化 Mat binaryImage = new Mat(); Imgproc.threshold(grayImage, binaryImage, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); // 保存二值化图像 Imgcodecs.imwrite("binary_image.jpg", binaryImage); } }
2.2.2.2. Memandangkan imej kontrak mungkin mempunyai sedikit bunyi, seperti butiran dan tekstur semasa pengimbasan atau penangkapan, kita perlu melakukan beberapa pemprosesan pada imej binari. , Buang bunyi ini. Ini boleh dicapai menggunakan operasi terbuka dalam perpustakaan OpenCV:
import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; public class NoiseRemoval { public static void main(String[] args) { // 读取二值化图像 Mat binaryImage = Imgcodecs.imread("binary_image.jpg", Imgcodecs.IMREAD_GRAYSCALE); // 进行开操作 Mat noiseRemovedImage = new Mat(); Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3)); Imgproc.morphologyEx(binaryImage, noiseRemovedImage, Imgproc.MORPH_OPEN, kernel); // 保存去噪声图像 Imgcodecs.imwrite("noise_removed_image.jpg", noiseRemovedImage); } }
Pengesanan tepi ialah langkah penting dalam mengenal pasti pengedap rasmi. Ia boleh dilaksanakan menggunakan algoritma Canny dalam perpustakaan OpenCV:
import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; public class EdgeDetection { public static void main(String[] args) { // 读取去噪声图像 Mat noiseRemovedImage = Imgcodecs.imread("noise_removed_image.jpg", Imgcodecs.IMREAD_GRAYSCALE); // 进行边缘检测 Mat edges = new Mat(); Imgproc.Canny(noiseRemovedImage, edges, 100, 200); // 保存边缘图像 Imgcodecs.imwrite("edges.jpg", edges); } }
Pertama, kita perlu mengekstrak beberapa ciri daripada imej tepi untuk latihan dan pengelasan. Ciri yang biasa digunakan termasuk bentuk, tekstur dan warna. Di sini kami mengambil ciri bentuk sebagai contoh, menggunakan pengesanan kontur dalam perpustakaan OpenCV untuk mengekstrak ciri bentuk meterai rasmi:
import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; public class ShapeFeatureExtraction { public static void main(String[] args) { // 读取边缘图像 Mat edges = Imgcodecs.imread("edges.jpg", Imgcodecs.IMREAD_GRAYSCALE); // 检测轮廓 List<MatOfPoint> contours = new ArrayList<>(); Mat hierarchy = new Mat(); Imgproc.findContours(edges, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); // 提取轮廓特征 double[] features = new double[contours.size()]; for (int i = 0; i < contours.size(); i++) { features[i] = Imgproc.contourArea(contours.get(i)); } // 打印轮廓特征 for (double feature : features) { System.out.println("Contour feature: " + feature); } } }
Seterusnya, kami menggunakan ciri yang diekstrak untuk latihan dan klasifikasi. Pertama, kita perlu menyediakan beberapa imej meterai rasmi berlabel sebagai sampel latihan. Kemudian, ciri yang diekstrak dan teg yang sepadan dilatih oleh algoritma pembelajaran mesin untuk membina pengelas pengedap rasmi. Dalam peringkat pengecaman, ciri-ciri imej kontrak yang akan diiktiraf diekstrak, dan kemudian pengelas terlatih digunakan untuk membuat pertimbangan pengelasan.
Atas ialah kandungan terperinci Cara mengenal pasti dengan tepat meterai rasmi sebenar pada kontrak menggunakan teknologi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!