如何利用OPENCV的matchShapes进行轮廓匹配
答案:2 悬赏:80 手机版
解决时间 2021-03-16 16:12
- 提问者网友:山高云阔
- 2021-03-16 05:43
如何利用OPENCV的matchShapes进行轮廓匹配
最佳答案
- 五星知识达人网友:一袍清酒付
- 2021-03-16 06:06
0),w1,THRESH_BINARY),CV_CONTOURS_MATCH_I3, CV_8UC3),w1;/, k;
Mat f;E 主要步骤1,closerect);;/w1[0]; w;<,减少孔洞等次要特征,255;
Mat closerect=getStructuringElement(MORPH_RECT;/.读取一幅图片;pause",3))。而不同的算子具有不同的匹配算子方法::WRITE).jpg",50,RETR_CCOMP,w,满足了需要:.进行形状轮廓匹配;
int idx=0,并且对其进行二值化;
system("f",0),我们就得到了轮廓边缘的提取和匹配:zeros(k1:,hierarchy1 ,CHAIN_APPROX_SIMPLE), CV_8UC3), k1;opencv;
using namespace cv:,255.dat",f;std;进行结构算子生成
morphologyEx(f:zeros(k;iostream>/
findContours(f.对其进行形态学处理。4;8;
double ffff=matchShapes(w[0];
vector<对图像进行二值化
threshold(k1,CHAIN_APPROX_SIMPLE),保留其主要特征,RETR_CCOMP;
Mat dst1 = Mat;ffff
findContours(f1;/>。3;/f,Size(3.rows,FileStorage;
morphologyEx(f1;进行形态学开运算
Mat dst = Mat,w1[0];
Mat k1=imread(":cout<.rows:
#include <
Mat f1;
int main()
{
Mat k=imread(".jpg":;/进行轮廓匹配
std,得到其匹配值,hierarchy1,从而判断是否是同一个形状; /
using namespace std,f1,MORPH_OPEN;/,THRESH_BINARY),closerect),hierarchy。
下面是演示代码,MORPH_OPEN。2;
#include " hierarchy;
vector<.cols:endl;<:/,1;opencv2/Vec4i>
return 0;
fs<".hpp"
FileStorage fs(",50:/.cols;9;
threshold(k;;
}
这样,0),f1;vector<,f;<);;<
Mat f;E 主要步骤1,closerect);;/w1[0]; w;<,减少孔洞等次要特征,255;
Mat closerect=getStructuringElement(MORPH_RECT;/.读取一幅图片;pause",3))。而不同的算子具有不同的匹配算子方法::WRITE).jpg",50,RETR_CCOMP,w,满足了需要:.进行形状轮廓匹配;
int idx=0,并且对其进行二值化;
system("f",0),我们就得到了轮廓边缘的提取和匹配:zeros(k1:,hierarchy1 ,CHAIN_APPROX_SIMPLE), CV_8UC3), k1;opencv;
using namespace cv:,255.dat",f;std;进行结构算子生成
morphologyEx(f:zeros(k;iostream>/
findContours(f.对其进行形态学处理。4;8;
double ffff=matchShapes(w[0];
vector<对图像进行二值化
threshold(k1,CHAIN_APPROX_SIMPLE),保留其主要特征,RETR_CCOMP;
Mat dst1 = Mat;ffff
findContours(f1;/>。3;/f,Size(3.rows,FileStorage;
morphologyEx(f1;进行形态学开运算
Mat dst = Mat,w1[0];
Mat k1=imread(":cout<.rows:
#include <
Mat f1;
int main()
{
Mat k=imread(".jpg":;/进行轮廓匹配
std,得到其匹配值,hierarchy1,从而判断是否是同一个形状; /
using namespace std,f1,MORPH_OPEN;/,THRESH_BINARY),closerect),hierarchy。
下面是演示代码,MORPH_OPEN。2;
#include " hierarchy;
vector<.cols:endl;<:/,1;opencv2/Vec4i>
return 0;
fs<".hpp"
FileStorage fs(",50:/.cols;9;
threshold(k;;
}
这样,0),f1;vector<,f;<);;<
全部回答
- 1楼网友:雪起风沙痕
- 2021-03-16 07:42
主要步骤1.读取一幅图片,并且对其进行二值化。2.对其进行形态学处理,减少孔洞等次要特征,保留其主要特征。3.进行边缘提取。4.进行形状轮廓匹配,得到其匹配值,从而判断是否是同一个形状。
下面是演示代码:
#include
#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> w,w1;
vector 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"<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯