java代码 如何将两张不同尺寸相同图案的照片进行图像比对,并保持高通过率
时间: 2024-03-12 22:45:49 浏览: 28
以下是一个简单的Java代码示例,使用OpenCV库实现两张不同尺寸相同图案的照片进行图像比对,并保持高通过率。
```java
import org.opencv.core.*;
import org.opencv.features2d.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ImageMatching {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 加载图片
Mat img1 = Imgcodecs.imread("img1.jpg");
Mat img2 = Imgcodecs.imread("img2.jpg");
// 图像预处理
Imgproc.cvtColor(img1, img1, Imgproc.COLOR_BGR2GRAY);
Imgproc.cvtColor(img2, img2, Imgproc.COLOR_BGR2GRAY);
// 特征提取
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
Mat descriptors1 = new Mat();
Mat descriptors2 = new Mat();
FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.SURF);
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2);
descriptor.compute(img1, keypoints1, descriptors1);
descriptor.compute(img2, keypoints2, descriptors2);
// 图像匹配
MatOfDMatch matches = new MatOfDMatch();
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
matcher.match(descriptors1, descriptors2, matches);
// 匹配结果评估
double max_dist = 0;
double min_dist = 100;
for (int i = 0; i < descriptors1.rows(); i++) {
double dist = matches.toList().get(i).distance;
if (dist < min_dist) {
min_dist = dist;
}
if (dist > max_dist) {
max_dist = dist;
}
}
LinkedList<DMatch> good_matches = new LinkedList<DMatch>();
for (int i = 0; i < descriptors1.rows(); i++) {
if (matches.toList().get(i).distance <= Math.max(2 * min_dist, 0.02)) {
good_matches.addLast(matches.toList().get(i));
}
}
if (good_matches.size() > 10) {
System.out.println("Matched successfully!");
} else {
System.out.println("Matched failed!");
}
}
}
```
这个示例代码使用SURF算法进行特征提取和匹配,使用FLANNBASED算法进行匹配。在匹配结果评估阶段,只有当匹配成功的特征点对数超过10个时,才认为匹配成功。其中,匹配成功的阈值可以根据实际情况进行调整,以达到更高的匹配准确率。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)