本文将介绍使用Java操作Opencv进行行大图找小图测试!
1、OpenCV简介
OpenCV是一个开源计算机视觉库,提供了丰富的图像处理和计算机规觉算法。它支持多种编程语言,包括Java本文将介绍如何在Java中使用OpenCV进行图像处理和计算机视觉任务。
2、引入安装
直接maven引入:
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>3.4.2-1</version>
</dependency>
3、 算法
Java中进行大图找小图主要如下步骤:
1.导入Opencv库
2.加载图像
3.进行模板匹配
4.获取匹配结果
5.绘制匹配结果
6.显示结果
4、代码
import java.net.URL;
import nu.pattern.OpenCV;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class TestPicFind {
public static void main(String[] args) {
String sourceImg = "D:/source.png";
String targetImg = "D:/target.png";
new TestPicFind().testMatching(sourceImg, targetImg);
}
public void testMatching(String sourceImg,String targetImg) {
// 1.导入Opencv库
OpenCV.loadShared();
// 2.加载图像
Mat src = Imgcodecs.imread(sourceImg);// 待匹配图片
Mat template = Imgcodecs.imread(targetImg);// 获取匹配模板
// 3.进行模板匹配
// 创建一个输出图像
Mat outputImage = new Mat(src.rows(), src.cols(), src.type());
Imgproc.matchTemplate(src, template, outputImage, Imgproc.TM_CCOEFF_NORMED);
// 4.获取匹配结果,查找最大匹配值
Core.MinMaxLocResult result = Core.minMaxLoc(outputImage);
Point matchLoc = result.maxLoc;
double similarity = result.maxVal; //匹配度
int x = (int) matchLoc.x; //小图大大图中的x坐标
int y = (int) matchLoc.y; //小图大大图中的y坐标
System.out.println(x + "," + y + " similarity: " + similarity);
//将查找到的结果标上框框
Imgproc.rectangle(src,new Point(x,y),new Point(x+template.cols(),y+template.rows()),
new Scalar( 0, 0, 255),2);
//5.显示结果
HighGui.imshow("模板匹配", src);
HighGui.waitKey();
}
}
图片如下: 1.target.png
2.source.png
运行结果:
1597,649 similarity: 0.9999993443489075
5、其他
OpenCV其他使用方式请见:OpenCV从入门到精通-CSDN博客