gpt4 book ai didi

c++ - findContours、contourArea 给出嵌套轮廓的错误。 "Assertion failed", "input array is not a valid matrix"

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:23 26 4
gpt4 key购买 nike

我试图在二值化图像中找到最大的轮廓。根据 this question 判断和 this tutorial你会认为这是微不足道的,我同意。当我在 the image below 上运行我的代码时但是,它会产生错误。请注意左上角的 2x2 点,它应该算作一个轮廓。

problem.png

Mat img = imread("problem.png", CV_LOAD_IMAGE_GRAYSCALE);
vector<vector<Point>> ContourVector;
findContours(img, ContourVector, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
//findContours(img, ContourVector, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); // Alternative mode

int biggest = 0;
double BiggestContourArea = contourArea(ContourVector[biggest]);
for (int i = 1; i != ContourVector.size(); ++i){
if ( (contourArea(ContourVector[i])) > BiggestContourArea) {
biggest = i;
BiggestContourArea = contourArea(ContourVector[biggest]);
}
}
img = Scalar(0,0,0);
drawContours(img, ContourVector, biggest, Scalar(255,255,255), CV_FILLED );
imshow("Largest contour", img);
waitKey(0);

如果使用 CV_RETR_LIST 模式,我会在 i = 3 处收到此错误,尽管 ContourVector 的大小为 4。但是,为什么 vector 会大于轮廓的数量?

"Assertion failed: (0 <= contourIdx && contourIdx < (int)last) in unknown function, file ..[..]contours.cpp, line 1810"

如果使用模式 CV_RETR_EXTERNAL(这会更有意义),我会收到此错误。为什么会这样

OpenCV Error: Bad argument (input array is not a valid matrix)  in unknown function, file ..[..]utils.cpp, line 54

如果有人能解释这些错误,我将不胜感激。

我还想知道为什么循环内 contourArea 的结果出于某种原因为 0 而 ContourVector[i].size() 给出了一个荒谬的大数字(大约 40 亿)。

最佳答案

我无法判断 CV_EXTERNAL 的情况。但在第一种情况下,问题似乎很简单。

for (int i = 1; i != ContourVector.size(); ++i){
if ( (contourArea(ContourVector[i])) > BiggestContourArea) {
biggest = i;
BiggestContourArea = contourArea(ContourVector[biggest]);
}
}

在 C++ 中,数组和 vector 从零开始索引。因此 vector 中的第一项的索引为 0,最后一项的索引为 ContourVector.size() - 1

要修复您的代码,只需将 for 循环更改为:

for (int i = 1; i < ContourVector.size(); ++i)    ....

关于c++ - findContours、contourArea 给出嵌套轮廓的错误。 "Assertion failed", "input array is not a valid matrix",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com