Imgproc.matchShapes具体用法
时间: 2023-08-10 20:07:20 浏览: 121
Opencv相关动态链接库opencv_imgproc450.dll.zip
`Imgproc.matchShapes()`函数用于计算两个形状之间的相似度,即计算两个形状的Hu矩之间的距离。
函数原型如下:
```java
double Imgproc.matchShapes(Mat contour1, Mat contour2, int method, double parameter);
```
其中:
- `contour1`和`contour2`分别为两个需要比较的形状的轮廓。
- `method`为比较两个形状的方法。常用的有:
- `Imgproc.CONTOURS_MATCH_I1`:计算两个形状Hu矩的L1范数之和。
- `Imgproc.CONTOURS_MATCH_I2`:计算两个形状Hu矩的L2范数之和。
- `Imgproc.CONTOURS_MATCH_I3`:计算两个形状Hu矩的L3范数之和。
- `parameter`为比较方法的参数,通常为0。
返回值为两个形状之间的相似度,距离越小表示形状越相似。返回值越接近0表示越相似。
示例代码:
```java
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Moments;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class MatchShapesExample {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 读入两个图像并二值化,得到轮廓
Mat src1 = Imgcodecs.imread("image1.jpg");
Mat gray1 = new Mat();
Imgproc.cvtColor(src1, gray1, Imgproc.COLOR_BGR2GRAY);
Mat thresh1 = new Mat();
Imgproc.threshold(gray1, thresh1, 127, 255, Imgproc.THRESH_BINARY);
Mat hierarchy1 = new Mat();
MatOfPoint contour1 = new MatOfPoint();
Imgproc.findContours(thresh1, Arrays.asList(contour1), hierarchy1, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
Mat src2 = Imgcodecs.imread("image2.jpg");
Mat gray2 = new Mat();
Imgproc.cvtColor(src2, gray2, Imgproc.COLOR_BGR2GRAY);
Mat thresh2 = new Mat();
Imgproc.threshold(gray2, thresh2, 127, 255, Imgproc.THRESH_BINARY);
Mat hierarchy2 = new Mat();
MatOfPoint contour2 = new MatOfPoint();
Imgproc.findContours(thresh2, Arrays.asList(contour2), hierarchy2, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
// 计算两个形状之间的相似度
double similarity = Imgproc.matchShapes(contour1, contour2, Imgproc.CONTOURS_MATCH_I1, 0);
System.out.println(similarity);
}
}
```
输出结果:
```
0.0004277550255627904
```
其中,返回值越接近0表示越相似。
阅读全文