两种方案对比:
方案一:针对轮廓1做距离变换求轮廓2对应位置的最小值
方案二:轮廓点集最小距离
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int plan1(Mat img1, Mat img2, double & distRes) {
Mat labels;
connectedComponents(img1, labels, 8, CV_16U);//连通域提取
Mat result(img1.size(), CV_32FC1, Scalar::all(0));
for (int i = 0; i <= 0; i++)
{
Mat mask1 = labels == 1 + i;//提取标签信息,当满足条件返回255,不满足返回0
//Mat mask2 = labels == 1 + (1 - i);
Mat masknot;
bitwise_not(mask1, masknot);
Mat dist;
distanceTransform(masknot, dist, DIST_L2, 5, CV_8U);
dist.copyTo(result, img2); //核心一句,直接提取距离信息
}
//FileStorage fs("distCtr.yml", FileStorage::WRITE);
//fs << "Image" << result;