- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 matchShapes
来识别一些基本轮廓。但是,无论我比较什么轮廓,它都会返回 0...
模板图片:
示例输入图像:
代码:
using std::vector;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy,
CV_RETR_CCOMP, CV_CHAIN_APPROX_TC89_KCOS);
drawContours(binary, contours, -1, Scalar(255, 255, 255));
if (!contours.size()) // avoid sigsegv
return;
for (int idx = 0; idx >= 0; idx = hierarchy[idx][0]) {
double bestMatch = INFINITY;
int bestI = -1;
for (int i = 0; i < knownContours.size(); i++) {
vector<Point>& a = knownContours[i].contour;
vector<Point>& b = contours[idx];
std::cout << "a.size = " << a.size() << ", b.size = " << b.size() << std::endl;
double match = matchShapes(b, a, CV_CONTOURS_MATCH_I1, 0);
std::cout << "idx=" << idx << " ? " << knownContours[i].name << " = " << match << std::endl;
if (bestI == -1 || match < bestMatch) {
bestI = i;
bestMatch = match;
}
}
}
(knownContours
显然是用模板图像数据初始化的:imread()
,然后是findContours()
,最后是this->轮廓 = 轮廓 [0]
).
结果输出(片段):
-- new frame
a.size = 57, b.size = 74
idx=0 ? circle = 0
a.size = 80, b.size = 74
idx=0 ? cross = 0
a.size = 45, b.size = 74
idx=0 ? triangle = 0
a.size = 57, b.size = 60
idx=1 ? circle = 0
a.size = 80, b.size = 60
idx=1 ? cross = 0
a.size = 45, b.size = 60
idx=1 ? triangle = 0
-- new frame
a.size = 57, b.size = 75
idx=0 ? circle = 0
a.size = 80, b.size = 75
idx=0 ? cross = 0
a.size = 45, b.size = 75
idx=0 ? triangle = 0
a.size = 57, b.size = 57
idx=1 ? circle = 0
a.size = 80, b.size = 57
idx=1 ? cross = 0
a.size = 45, b.size = 57
idx=1 ? triangle = 0
-- new frame
a.size = 57, b.size = 76
idx=0 ? circle = 0
a.size = 80, b.size = 76
idx=0 ? cross = 0
a.size = 45, b.size = 76
idx=0 ? triangle = 0
a.size = 57, b.size = 51
idx=1 ? circle = 0
a.size = 80, b.size = 51
idx=1 ? cross = 0
a.size = 45, b.size = 51
idx=1 ? triangle = 0
所以比较轮廓的大小不同(因此轮廓不同),但 match == 0
总是。这是怎么回事?
编辑:OpenCV 版本为 2.4.9(昨天克隆和构建)。
最佳答案
关于OpenCV 的 matchShapes 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976029/
我想使用 matchShapes() 函数在查询图像中查找对象。 假设我有一本书的模型图像,我想提取它的形状,然后尝试在另一幅图像中找到这本书(它的形状)。 我在谷歌上搜索了很多,但找不到任何关于如何
我试图用matchShapes方法匹配两个轮廓,但是我总是断言失败。 我知道这一定与错误的Mat格式有关,但我似乎无法解决。 findContours运行得很好: vector > contours;
如何使用 OpenCV matchShapes 输出的值?我们实现了 OpenCV matchShapes 函数来比较两个图像,特别是形状。但是当我们得到答案时,我们很困惑如何使用这些值? 代码是 -
根据 matchShapes 文档,输入可以是灰度图像或轮廓。但是当我尝试两张灰度图像时,我得到了断言失败的错误。经过进一步探索,我发现了 here Mat 对象必须是 CV_32FC2 或 CV
下面给出了用于比较 2 个形状的程序代码。 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp"
我正在使用 matchShapes 来识别一些基本轮廓。但是,无论我比较什么轮廓,它都会返回 0... 模板图片: 示例输入图像: 代码: using std::vector; vector > co
我正在开发一个应用程序,我使用 OpenCV 的 matchShapes() 比较两个图像。 我在 Objective-C 代码中实现的方法如下 - (void) someMethod:(UIImag
我正在尝试检查两张图像中检测到的轮廓是否匹配。我已经看到 OpenCV 有一个名为 matchShapes 的函数,它返回一个相似性度量。然而,它只接收一个 Mat 的 Points,而不是所有的点。
简单介绍一下我在做什么......出于学术目的,我正在使用 opencv 在 c++ 中创建一个应用程序来检测场景中的静态对象。该应用程序基于背景减除和跟踪的组合方法,与对象遗弃相关的事件检测效果很好
我在白板上随机画了一幅画,NAO 机器人拍了一张照片并试图重新创作相同的画。 我的画: NAO 的绘图: 此时我想写一些关于它的结论,特别是我想从两张图片中提取轮廓并使用 OpenCV 函数 cv2.
我是一名优秀的程序员,十分优秀!