gpt4 book ai didi

image-processing - 如何使用 OpenCV(模板匹配)检测和匹配标记

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:32 25 4
gpt4 key购买 nike

我正在使用在特定区域包含标记的图像。我尝试使用模板匹配来做到这一点,这是在 opencv 中定义为 cvMatchTemplate 的方法。

我正在使用网络摄像头检测它们,目前程序正在检测标记,因为我提供了与模板相同的标记。

但我找不到一种方法来检查它是最佳匹配还是略微匹配。因为在 cvMatchTemplate 中它不仅检测最佳匹配,它还不断检测稍微匹配的区域。

谁能告诉我一个方法来做到这一点。或者如果有任何其他方法可以解决我的问题,请告诉我!

这是我的图片卡的链接 http://imageshack.us/photo/my-images/266/piggycard.jpg/(我想检测并检查它是否被加工)

这是代码

//template_mching_test_2.cpp :定义控制台应用程序的入口点。//

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main()
{
IplImage* imgOriginal = cvLoadImage("D:\\4Yr\\Research\\SRS\\Animations\\Piggycard.jpg", 0);
IplImage* imgTemplate = cvLoadImage("D:\\4Yr\\Research\\MakingOf\\Sample Imageas\\PiggyMarkerStart.jpg", 0);

CvCapture *cap = cvCaptureFromCAM(0);

if(!cap)
return -1;

cvNamedWindow("result");

IplImage* imgOriginal;
IplImage* imgOriginal2;
IplImage* imgResult;

while(true)
{
imgOriginal = cvQueryFrame(cap);//cvCreateImage(cvSize(imgOriginal->width-imgTemplate->width+1, imgOriginal->height-imgTemplate->height+1), IPL_DEPTH_32F, 1);
imgOriginal2 = cvCreateImage(cvSize(imgOriginal->width,imgOriginal->height),imgOriginal->depth,1);
imgResult = cvCreateImage(cvSize(imgOriginal->width-imgTemplate->width + 1,imgOriginal->height-imgTemplate->height+1),IPL_DEPTH_32F,1);

cvZero(imgResult);
cvZero(imgOriginal2);

cvCvtColor(imgOriginal,imgOriginal2,CV_BGR2GRAY);
cvMatchTemplate(imgOriginal2, imgTemplate, imgResult,CV_TM_CCORR_NORMED);

double min_val=0, max_val=0;
CvPoint min_loc, max_loc;
cvMinMaxLoc(imgResult, &min_val, &max_val, &min_loc, &max_loc);

cvRectangle(imgOriginal, max_loc, cvPoint(max_loc.x+imgTemplate->width, max_loc.y+imgTemplate->height), cvScalar(0), 1);
printf("%f \n", max_val);

cvShowImage("result", imgOriginal);

cvWaitKey(10);

cvReleaseImage(&imgOriginal2);
cvReleaseImage(&imgResult);
}

cvDestroyAllWindows();
cvReleaseCapture(&cap);

return 0;

}

作为模板,我提供了从原始图像裁剪的相同标记。从 minMaxLoc 我取最大值来检查最佳匹配。但是当图像标记位于某个位置时,它会一直给我相同的值,并且当图像标记不在框架中并且在先前与标记匹配的位置稍微匹配时。minMaxloc 是否给我们的坐标(位置)标记或匹配百分比。或者还有其他方法吗?感谢您的考虑。

最佳答案

有一个OpenCV tutorial on the subject of Template Matching .

使用 matchTemplate是一个好的开始,它会为您提供包含与您的匹配指标相关的数字的图像(该指标有一系列选择,其中一些提供高数字以更好地匹配,一些低)。

为了随后挑选出最佳匹配,您还需要使用函数 minMaxLoc它可以从这个矩阵中找到最小值和最大值。

关于image-processing - 如何使用 OpenCV(模板匹配)检测和匹配标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11095113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com