- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 OpenCV matchShapes 输出的值?我们实现了 OpenCV matchShapes 函数来比较两个图像,特别是形状。但是当我们得到答案时,我们很困惑如何使用这些值?
代码是
- (bool) someMethod:(UIImage *)image :(UIImage *)temp {
RNG rng(12345);
cv::Mat src_base, hsv_base;
cv::Mat src_test1, hsv_test1;
src_base = [self cvMatWithImage:image];
src_test1 = [self cvMatWithImage:temp];
int thresh=150;
double ans=0, result=0;
Mat imageresult1, imageresult2;
cv::cvtColor(src_base, hsv_base, cv::COLOR_BGR2HSV);
cv::cvtColor(src_test1, hsv_test1, cv::COLOR_BGR2HSV);
std::vector<std::vector<cv::Point>>contours1, contours2;
std::vector<Vec4i>hierarchy1, hierarchy2;
Canny(hsv_base, imageresult1, thresh, thresh*2);
Canny(hsv_test1, imageresult2, thresh, thresh*2);
findContours(imageresult1,contours1,hierarchy1,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
for(int i=0;i<contours1.size();i++)
{
//cout<<contours1[i]<<endl;
Scalar color=Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
drawContours(imageresult1,contours1,i,color,1,8,hierarchy1,0,cv::Point());
}
findContours(imageresult2,contours2,hierarchy2,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
for(int i=0;i<contours2.size();i++)
{
Scalar color=Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
drawContours(imageresult2,contours2,i,color,1,8,hierarchy2,0,cv::Point());
}
for(int i=0;i<contours1.size();i++)
{
ans = matchShapes(contours1[i],contours2[i],CV_CONTOURS_MATCH_I1,0);
cout<<" "<<ans<<endl;
}
std::cout<<"The answer is "<<ans<<endl;
if (ans<=20) {
return true;
}
return false;
输出值为
0.225069 0.234417 0 7.63599 0 7.06392 0.335966 0.211358 0.327552 0.842969 0.761659 0.614039
最佳答案
请参阅我对 imoutidi 的回答的评论。这是一个直观的解释:第一个列是两个原始图像,第二个是精明的边缘。 3.col 是任意选择的两个图像中具有相同索引的检测到的形状。如您所见,甚至不能保证它们对应于人类看到的相同图像部分。在这种情况下,您最终比较的是不同的三角形,这对整体形状的相似性影响不大。这两个形状数组的大小甚至都不相同,因为例如底部绘图中有更多结构(例如粗线之间的小形状)。 4.col是数组中的最后一个形状。这是比较图像的最佳选择。在此示例中,我得到的相似度值为 0.0920794532771。
关于ios - OpenCV matchShapes() 输出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256280/
我想使用 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.
我是一名优秀的程序员,十分优秀!