gpt4 book ai didi

c++ - OpenCV contourArea() 不工作

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

我是 OpenCV 的新手,有一个小问题,可能很容易解决。基本上我在做一些基本的图像处理,我试图找到 contourArea() < 3000 的轮廓。

问题是,我在尝试绘制轮廓和/或调用 contourArea() 函数时遇到以下错误:

错误发生在cv:contourArea()行,错误信息为:

OpenCV Error: Assertion failed (contour.checkVector(2) >= 0 && (contour.depth() == CV_32F || contour.depth() == CV_32S)) in cv::contourArea,
file ..\..\..\..\opencv\modules\imgproc\src\contours.cpp, line 1904

非常感谢任何帮助。代码如下:

using namespace cv;

cv::Mat greyMat, binaryMat, newMat;
cv::Mat image = cv::imread("image.png", 1);
// First convert image to gray scale
cv::cvtColor(image, greyMat, CV_BGR2GRAY);

cv::adaptiveThreshold(greyMat, binaryMat, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY_INV, 45, 0);

erode(binaryMat, binaryMat, getStructuringElement(MORPH_ELLIPSE, Size(2, 2)));
dilate(binaryMat, binaryMat, getStructuringElement(MORPH_ELLIPSE, Size(1, 1)));

// Remove unclosed curves (the circled hashtag)
cv::copyMakeBorder(binaryMat, newMat, 1, 1, 1, 1, cv::BORDER_CONSTANT, 0);
cv::floodFill(newMat, cv::Point(0, 0), 255);

newMat = 255 - newMat;

cv::Mat cMat;
newMat.copyTo(cMat);

std::vector<std::vector<cv::Point>> contours;
cv::findContours(cMat, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);

std::cout << "Found: " << contours.size() << " " << contours[0][0] << std::endl;

for (size_t i = 0; i < contours.size(); i++)
{
if (cv::contourArea(contours[i]) < 3000)
{
cv::drawContours(newMat, contours, i, 255, -1);
}
}

cv::imshow("Debug", newMat);
cv::waitKey(0);
return 0;

最佳答案

不确定,但从我在错误消息中读到的内容来看,该函数需要一个浮点值,而你给他的 vector 是 Point 的 vector 。

根据current manual ,这个类型是一个整数点,所以这可能是问题所在。

关于c++ - OpenCV contourArea() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23582622/

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