- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 arcLength
计算等高线周长。轮廓从文件中读取到 Mat
中,它只是轮廓的黑白图片。但是,当我将此 Mat
传递给函数时,它会抛出一个错误:
Assertion failed (curve.checkVector(2) >= 0 && (curve.depth() == CV_32F || curve.depth() == CV_32S)) in arcLength
我发现真正的原因是 curve.checkVector(2)
返回 -1。虽然我已经阅读了有关此方法的文档,但我仍然不明白如何修复此错误。
这是带有角点 (1,1), (1,21), (21,21), (21,1) 的测试图像
最佳答案
轮廓应该是(来自 OpenCV doc ):
Input vector of 2D points, stored in std::vector or Mat.
不是黑白图像。
您可以用不同的方法计算周长。最稳健的方法是使用 findContours
仅查找外部轮廓 (RETR_EXTERNAL
),并在该轮廓上调用 arcLength
。
几个例子:
#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
Mat1b img = imread("path_to_image", IMREAD_GRAYSCALE);
// Method 1: length of unsorted points
// NOTE: doesn't work!
vector<Point> points;
findNonZero(img, points);
double len1 = arcLength(points, true);
// 848.78
// Method 2: length of the external contour
vector<vector<Point>> contours;
findContours(img.clone(), contours, RETR_EXTERNAL, CHAIN_APPROX_NONE); // Retrieve only external contour
double len2 = arcLength(contours[0], true);
// 80
// Method 3: length of convex hull of contour
// NOTE: convex hull based methods work reliably only for convex shapes.
vector<Point> hull1;
convexHull(contours[0], hull1);
double len3 = arcLength(hull1, true);
// 80
// Method 4: length of convex hull of unsorted points
// NOTE: convex hull based methods work reliably only for convex shapes.
vector<Point> hull2;
convexHull(points, hull2);
double len4 = arcLength(hull2, true);
// 80
// Method 5: number of points in the contour
// NOTE: this will simply count the number of points in the contour.
// It works only if:
// 1) findContours was used with option CHAIN_APPROX_NONE.
// 2) the contours is thin (has thickness of 1 pixel).
double len5 = contours[0].size();
// 80
return 0;
}
关于c++ - OpenCV:arcLength 断言因 cv::Mat 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127564/
我正在尝试在OpencCV 2.3.4 Python API中实现连接组件的噪声消除,如Learning OpenCV中从第287页开始所述 我已经计算出轮廓的长度,在此我得到了一个神秘的断言错误。
我正在尝试测量等高线的长度: 绿线是在轮廓上计算的 HoughLineP。通过计算绿线上的欧氏距离,我得到 153.88。然而,轮廓上的 arcLength() 给出了 364.71,而它应该比 Ho
这些功能是如何工作的?我正在使用 Python3.7 和 OpenCv 4.2.0。提前致谢。 approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cn
我尝试使用 arcLength 计算等高线周长。轮廓从文件中读取到 Mat 中,它只是轮廓的黑白图片。但是,当我将此 Mat 传递给函数时,它会抛出一个错误: Assertion failed (cu
我的代码有问题,找不到合适的解决方案。我正在使用 Python 2.7.10 和 OpenCV 3.0。我读了两张图片,想将其中一张图片(模板)与另一张图片的轮廓相匹配,但出现以下错误: error:
当我尝试运行以下代码时: img = cv2.imread('index4.jpg',0) ret,thresh = cv2.threshold(img,127,255,0) ret,thresh =
我是一名优秀的程序员,十分优秀!