- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是在从相机捕获的图像中找到图案,为此,我找到了实现它的opencv的cv::matchShapes
方法。
当我实现此方法时,它会使应用程序在matchShapes方法上崩溃。可能是我做错了:-
我完全不知道如何使用此方法在查询图像中找到匹配形状。这就是我尝试过的方法。
这是我的代码:
- (void)tryingMatchShapes:(cv::Mat)_image _image1:(cv::Mat)_image1
{
std::vector<std::vector<cv::Point> > squares;
cv::Mat pyr, timg, gray0(_image.size(), CV_8U), gray;
int thresh = 50, N = 11;
cv::pyrDown(_image, pyr, cv::Size(_image.cols/2, _image.rows/2));
cv::pyrUp(pyr, timg, _image.size());
std::vector<std::vector<cv::Point> > contours;
for( int c = 0; c < 3; c++ ) {
int ch[] = {c, 0};
mixChannels(&timg, 1, &gray0, 1, ch, 1);
for( int l = 0; l < N; l++ ) {
if( l == 0 ) {
cv::Canny(gray0, gray, 0, thresh, 5);
cv::dilate(gray, gray, cv::Mat(), cv::Point(-1,-1));
}
else {
gray = gray0 >= (l+1)*255/N;
}
cv::findContours(gray, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
}
}
cv::Mat pyr1, timg1, gray2(_image1.size(), CV_8U), gray1;
cv::pyrDown(_image1, pyr1, cv::Size(_image1.cols/2, _image1.rows/2));
cv::pyrUp(pyr1, timg1, _image1.size());
std::vector<std::vector<cv::Point> > contours1;
for( int c = 0; c < 3; c++ ) {
int ch[] = {c, 0};
mixChannels(&timg1, 1, &gray2, 1, ch, 1);
for( int l = 0; l < N; l++ ) {
if( l == 0 ) {
cv::Canny(gray2, gray1, 0, thresh, 5);
cv::dilate(gray1, gray1, cv::Mat(), cv::Point(-1,-1));
}
else {
gray1 = gray2 >= (l+1)*255/N;
}
cv::findContours(gray1, contours1, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
}
}
for( size_t i = 0; i < contours.size(); i++ )
{
double value= cv::matchShapes(contours[i], contours1[i], CV_CONTOURS_MATCH_I1, 0);
NSLog(@"%f",value);
}
}
UIImage *testImage = [UIImage imageNamed:@"note_with_marks (1).png"];
[self.imageView setImage:testImage];
cv::Mat forground = [testImage CVMat];
UIImage *testImage2 = [UIImage imageNamed:@"1.png"];
cv::Mat forground2 = [testImage2 CVMat];
[self tryingMatchShapes:forground _image1:forground2];
The app is getting crashed.
Error:-
OpenCV Error: Assertion failed (contour1.checkVector(2) >= 0 && contour2.checkVector(2) >= 0 && (contour1.depth() == CV_32F || contour1.depth() == CV_32S) && contour1.depth() == contour2.depth()) in matchShapes, file /Users/Aziz/Documents/Projects/opencv_sources/trunk/modules/imgproc/src/contours.cpp, line 1705
最佳答案
std::vector<std::vector<cv::Point> > contours1;
matchShapes
应用于此类类型。您可以将其应用于每个(一个)轮廓,而不适用于轮廓的组(阵列)。例如:
cv::matchShapes(contours[0], contours1[0], CV_CONTOURS_MATCH_I1, 0);
关于iphone - cv::matchShapes方法实现产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142976/
我想使用 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.
我是一名优秀的程序员,十分优秀!