- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 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/
使用 cv::Canny() 后,图像中似乎出现了一些非闭合曲线。所以我的问题是, cv::ContourArea() 将如何处理它们?先关闭曲线来计算面积还是忽略它们? 最佳答案 来自 Contou
当我尝试启动我的应用程序时,它在执行 contourArea 时意外崩溃。 这里是错误: OpenCV Error: Assertion Failed (contour.checkVector(2)
我想做的是在夜间地球的照片中找到大面积的光污染区域。我将源照片转换为灰度,然后转换为具有阈值的二值照片。 cv2.findcontours 工作正常,但当我尝试去除小轮廓时,它只会删除其中的一部分。
我是 OpenCV 的新手,有一个小问题,可能很容易解决。基本上我在做一些基本的图像处理,我试图找到 contourArea() = 0 && (contour.depth() == CV_32F |
我正在尝试测量等高线的长度: 绿线是在轮廓上计算的 HoughLineP。通过计算绿线上的欧氏距离,我得到 153.88。然而,轮廓上的 arcLength() 给出了 364.71,而它应该比 Ho
documentation for cv.contourArea 表示,如果oriented为true,则返回值将为正值或负值,具体取决于轮廓的方向: oriented: Oriented area
我正在尝试使用 OpenCV 和 Python 获取图像中的最大区域,代码如下: #Loading image: fuente=cv.LoadImage('train/fruit1.jpg') #Co
如何根据等高线区域的大小对等高线进行排序?我怎样才能得到最大/最小的? 最佳答案 您可以使用 std::sort使用自定义比较函数对象 // comparison function object bo
如果我有一个 3x3 二值图像,并且位置 (x,y) 中有一个轮廓:(0,0), (0,1), (1,0), (1,1) 我通过 findContours 方法获取轮廓。 我想得到这个轮廓的面积: 计
我尝试根据生成的船体点计算船体面积凸包()。 我关注了OpenCV Python tutorial (因为没有 Java 教程)并摆弄代码完成。 这是代码: Imgproc.findContours(
我试图在二值化图像中找到最大的轮廓。根据 this question 判断和 this tutorial你会认为这是微不足道的,我同意。当我在 the image below 上运行我的代码时但是,它
我的目标是使用 HOG 描述符识别汽车标志。我正在关注教程链接 https://gurus.pyimagesearch.com/lesson-sample-histogram-of-oriented-
当我尝试运行以下代码时: img = cv2.imread('index4.jpg',0) ret,thresh = cv2.threshold(img,127,255,0) ret,thresh =
我正在尝试使用代码阅读多项选择测试反馈中的答案,但出现以下错误消息: error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F |
我是一名优秀的程序员,十分优秀!