- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试根据生成的船体点计算船体面积凸包()
。
我关注了OpenCV Python tutorial (因为没有 Java 教程)并摆弄代码完成。
这是代码:
Imgproc.findContours(patternEdges, patternContours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
MatOfInt patternHull = new MatOfInt();
Imgproc.convexHull(patternContours.get(0), patternHull);
Imgproc.contourArea(pickPoints(patternContours.get(0), patternHull)); // fails here
但这会引发以下异常:
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.1.2) /home/build/git/opencv/modules/imgproc/src/shapedescr.cpp:274: error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F || depth == CV_32S) in function 'contourArea']
at org.opencv.imgproc.Imgproc.contourArea_1(Native Method)
at org.opencv.imgproc.Imgproc.contourArea(Imgproc.java:1607)
at com.acme.opencv.Test.main(Test.java:94)
显然矩阵内部数据类型是错误的。但为什么,以及如何转换它?
我使用的是 OpenCV 4.1.2。
最佳答案
问题是,在Java中,API只实现了填充MatOfInt
与原始点矩阵的索引。
这就是Javadoc (直接从 C++ 文档生成)说:
hull
Output convex hull. It is either an integer vector of indices or vector of points. In the first case, the hull elements are 0-based indices of the convex hull points in the original array (since the set of convex hull points is a subset of the original point set). In the second case, hull elements are the convex hull points themselves.(Emphasis mine)
没有“或”。只有 MatOfInt
,它是原始点
矩阵。
您可以通过这样的辅助函数使用选取的点创建一个新矩阵:
private static MatOfPoint2f pickPoints(MatOfPoint points, MatOfInt indices) {
Point[] pickedPoints = new Point[indices.rows()];
int newRow = 0;
for (int index : indices.toArray()) {
pickedPoints[newRow++] = new Point(points.get(index, 0));
}
return new MatOfPoint2f(pickedPoints);
}
然后使用它:
Imgproc.findContours(patternEdges, patternContours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
MatOfInt patternHullIndices = new MatOfInt();
Imgproc.convexHull(patternContours.get(0), patternHullIndices);
Imgproc.contourArea(pickPoints(patternContours.get(0), patternHull));
关于java - OpenCV 4.1 Java -contourArea() 断言深度 == CV_32F || 失败船体矩阵的深度 == CV_32S,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58963442/
使用 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 |
我是一名优秀的程序员,十分优秀!