QT + opencv 实现形状(轮廓)模板匹配
实现思路
1.创建模板数据:主要是提取模板的轮廓信息,这一步通常通过边缘检测实现。将模板的轮廓信息存储起来。
代码:
//创建形状模板
bool cvLearnShapeMatchPattern_(Mat matDst, MyShapeUiParam param, MyShapeTemplData* pTemplData)
{
//图像不存在
if(matDst.empty())
return false;
//清除模板
pTemplData->clear();
//边缘检测
Mat canny, gray;
vector<Point> contours;
cv::Canny(matDst, canny, pTemplData->minThresh, pTemplData->maxThresh);
canny.copyTo(gray);
/*if(!(pTemplData->sample==0))
{
Mat element=getStructuringElement(MORPH_ELLIPSE, Size(pTemplData->dilate, pTemplData->dilate));
cv::dilate(canny, gray, element);
}*/
cvFindContour_(gray, contours, pTemplData->minLen, 10e9, pTemplData->sample);
if((int)contours.size()==0)
return false;
//压缩金字塔
int iTopLayer=param.m_iPyramid;
buildPyramid(matDst, pTemplData->vecPyramid, iTopLayer);
for(size_t i=0;i<pTemplData->vecPyramid.size();i++)
{
//轮廓信息
Mat src=pTemplData->vecPyramid[i];
vector<Point> pyrContour=cvPyrContour_(contours, matDst.size(), src.size

最低0.47元/天 解锁文章
1954

被折叠的 条评论
为什么被折叠?



