opencv不规则图像轮廓匹配并标绘出来c++代码实现
时间: 2024-01-06 18:53:21 浏览: 108
以下是使用 OpenCV 实现不规则图像轮廓匹配并标绘的 C++ 代码示例:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat img1 = imread("img1.png", IMREAD_GRAYSCALE);
Mat img2 = imread("img2.png", IMREAD_GRAYSCALE);
// 提取轮廓
vector<vector<Point>> contours1, contours2;
findContours(img1, contours1, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
findContours(img2, contours2, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 对轮廓进行匹配
for (int i = 0; i < contours1.size(); i++) {
for (int j = 0; j < contours2.size(); j++) {
double match = matchShapes(contours1[i], contours2[j], CONTOURS_MATCH_I1, 0);
if (match < 0.1) {
// 绘制匹配的轮廓
drawContours(img1, contours1, i, Scalar(0, 0, 255), 2);
drawContours(img2, contours2, j, Scalar(0, 0, 255), 2);
}
}
}
// 显示结果
imshow("img1", img1);
imshow("img2", img2);
waitKey(0);
return 0;
}
```
其中,`img1.png` 和 `img2.png` 分别是需要匹配的两幅图像。首先对两幅图像提取轮廓,然后使用 `matchShapes` 函数对所有轮廓进行匹配,并根据匹配程度绘制匹配的轮廓。最后显示结果。注意,此处使用的是 `CONTOURS_MATCH_I1` 匹配算法,如果需要使用其他算法可以更改参数。
阅读全文