如何利用OPENCV的matchShapes进行轮廓匹配

 我来答
huanglenzhi
推荐于2018-01-25 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  主要步骤1.读取一幅图片,并且对其进行二值化。2.对其进行形态学处理,减少孔洞等次要特征,保留其主要特征。3.进行边缘提取。4.进行形状轮廓匹配,得到其匹配值,从而判断是否是同一个形状。

  下面是演示代码:

  #include <iostream>

  #include "opencv2/opencv.hpp"

  using namespace std;

  using namespace cv;

  int main()

  {

  Mat k=imread("E:/TestGit/8.jpg",0);

  Mat f;

  Mat k1=imread("E:/TestGit/9.jpg",0);

  Mat f1;

  threshold(k,f,50,255,THRESH_BINARY);//对图像进行二值化

  threshold(k1,f1,50,255,THRESH_BINARY);

  Mat closerect=getStructuringElement(MORPH_RECT,Size(3,3)); //进行结构算子生成

  morphologyEx(f,f,MORPH_OPEN,closerect);

  morphologyEx(f1,f1,MORPH_OPEN,closerect);//进行形态学开运算

  Mat dst = Mat::zeros(k.rows, k.cols, CV_8UC3);

  Mat dst1 = Mat::zeros(k1.rows, k1.cols, CV_8UC3);

  vector<vector<Point>> w,w1;

  vector<Vec4i> hierarchy,hierarchy1 ;

  findContours(f,w,hierarchy,RETR_CCOMP,CHAIN_APPROX_SIMPLE);//提取轮廓元素

  findContours(f1,w1,hierarchy1,RETR_CCOMP,CHAIN_APPROX_SIMPLE);

  FileStorage fs("f.dat",FileStorage::WRITE);

  fs<<"f"<<w1[0];

  int idx=0;

  double ffff=matchShapes(w[0],w1[0],CV_CONTOURS_MATCH_I3,1.0);//进行轮廓匹配

  std::cout<<ffff<<std::endl;

  system("pause");

  return 0;

  }

  这样,我们就得到了轮廓边缘的提取和匹配,满足了需要。而不同的算子具有不同的匹配算子方法。
昆河夜语

2020-12-02 · TA获得超过4.7万个赞
知道大有可为答主
回答量:2.5万
采纳率:100%
帮助的人:837万
展开全部
如何利用OPENCV的matchShapes进行轮廓匹配?主要步骤1.读取一幅图片,并且对其进行二值化。2.对其进行形态学处理,减少孔洞等次要特征,保留其主要特征。3.进行边缘提取。4.进行形状轮廓匹配,得到其匹配值,从而判断是否是同一个形状。
下面是演示代码:
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat k=imread("E:/TestGit/8.jpg",0);
Mat f;
Mat k1=imread("E:/TestGit/9.jpg",0);
Mat f1;
threshold(k,f,50,255,THRESH_BINARY);//对图像进行二值化
threshold(k1,f1,50,255,THRESH_BINARY);
Mat closerect=getStructuringElement(MORPH_RECT,Size(3,3)); //进行结构算子生成
morphologyEx(f,f,MORPH_OPEN,closerect);
morphologyEx(f1,f1,MORPH_OPEN,closerect);//进行形态学开运算
Mat dst = Mat::zeros(k.rows, k.cols, CV_8UC3);
Mat dst1 = Mat::zeros(k1.rows, k1.cols, CV_8UC3);
vector<vector<Point>> w,w1;
vector<Vec4i> hierarchy,hierarchy1 ;
findContours(f,w,hierarchy,RETR_CCOMP,CHAIN_APPROX_SIMPLE);//提取轮廓元素
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式