OpenCvSharp 检测图像中的许多部分
OpenCvSharp detect many part into image
对几种类型的图像进行研究的最佳方法是什么。
这些是真正不同的复杂图像。
我为我在视频中搜索的每个图像使用 MatchTemplate。
我需要知道我每次都在寻找什么样的图像。
这样做正确吗?对我寻找的图像的每个部分进行处理?
Mat finderone = ...........;
Mat findertwo = ...........;
Mat finder... = ...........;
var res1 = matSource.MatchTemplate(finderone,TemplateMatchModes.CCoeffNormed)
var res2 = matSource.MatchTemplatefindertwo,TemplateMatchModes.CCoeffNormed)
var res3 = matSource.MatchTemplate(.... , TemplateMatchModes.CCoeffNormed)
您的方法可能足够了,但它有几个局限性。您的图案不应旋转、缩放或遮挡。
还有其他几种图像检测方法。比如基于特征点的,比如SURF,SIFT等等。 OpenCV 有很好的关于在图像中查找已知对象的教程:feature homography
用opencvsharp也可以轻松实现
如果 MatchTemplate
满足您的要求,而您只想优化代码,那是不可能的,因为 MatchTemplate
无法同时使用多个模板。您可以做的最好的事情是提高代码的可读性并将模板构造为单个垫子阵列并在循环中检查它:
Mat[] templates = new Mat[] { finderone, finder..., finder_N };
Mat[] results = new Mat[templates.Lenght];
for (int i = 0; i < templates.Length; ++i) {
results[i] = sourceMat.MatchTemplate(templates[i], TemplateMatchModes.CCoeffNormed);
}
对几种类型的图像进行研究的最佳方法是什么。 这些是真正不同的复杂图像。 我为我在视频中搜索的每个图像使用 MatchTemplate。 我需要知道我每次都在寻找什么样的图像。
这样做正确吗?对我寻找的图像的每个部分进行处理?
Mat finderone = ...........;
Mat findertwo = ...........;
Mat finder... = ...........;
var res1 = matSource.MatchTemplate(finderone,TemplateMatchModes.CCoeffNormed)
var res2 = matSource.MatchTemplatefindertwo,TemplateMatchModes.CCoeffNormed)
var res3 = matSource.MatchTemplate(.... , TemplateMatchModes.CCoeffNormed)
您的方法可能足够了,但它有几个局限性。您的图案不应旋转、缩放或遮挡。
还有其他几种图像检测方法。比如基于特征点的,比如SURF,SIFT等等。 OpenCV 有很好的关于在图像中查找已知对象的教程:feature homography
用opencvsharp也可以轻松实现
如果 MatchTemplate
满足您的要求,而您只想优化代码,那是不可能的,因为 MatchTemplate
无法同时使用多个模板。您可以做的最好的事情是提高代码的可读性并将模板构造为单个垫子阵列并在循环中检查它:
Mat[] templates = new Mat[] { finderone, finder..., finder_N };
Mat[] results = new Mat[templates.Lenght];
for (int i = 0; i < templates.Length; ++i) {
results[i] = sourceMat.MatchTemplate(templates[i], TemplateMatchModes.CCoeffNormed);
}