【发布时间】:2016-04-20 05:34:00
【问题描述】:
我首先阅读了这个Mat。
然后我将其转换为灰度并对其应用Imgproc.canny(),得到以下蒙版。
然后我用Imgproc.findContours()找到轮廓,Imgproc.drawContours()和Core.putText()用数字标记轮廓:
然后我做了Rect boundingRect = Imgproc.boundingRect(contours.get(0));
Mat submatrix = new Mat();
submatrix = originalMat.submat(boundingRect); 来关注submatrix:
到目前为止一切顺利。问题从今以后开始:
现在我需要 submatrix 的面具。所以我决定用Imgproc.drawContours()来获取面具:
Mat mask = new Mat(submatrix.rows(), submatrix.cols(), CvType.CV_8UC1);
List<MatOfPoint> contourList = new ArrayList<>();
contourList.add(contours.get(0));
Imgproc.drawContours(mask, contourList, 0, new Scalar(255), -1);
我得到了以下面具:
我期待的是黑色背景上的填充(白色)菱形。
为什么我会得到这个意想不到的结果?
编辑:
-
当我将
Mat mask = new Mat(submatrix.rows(), submatrix.cols(), CvType.CV_8UC1);替换为Mat mask = Mat.zeros(submatrix.rows(), submatrix.cols(), CvType.CV_8UC1);时, 最后一个带有白色 garbage 的掩码被替换为空的 黑色面具上没有任何白色。我得到了以下子垫 和面具: -
我得到了轮廓列表中的第一个轮廓(命名为
contours) 通过contours.get(0),并使用第一个轮廓 计算Imgproc.boundingRect()以及contourList.add(contours.get(0));稍后(contourList是 将在最后使用的仅一个轮廓的列表drawContours())。然后我继续将
contours.get(0)更改为contours.get(1)在Imgproc.boundingRect()和contourList.add();中(就在Imgproc.drawContours()之前)。那 产生了这个子垫和掩码: -
然后我改回
contours.get(0)inImgproc.boundingRect();然后让contourList.add(contours.get(1));在那里。得到以下 子垫和掩码:
现在我完全无法理解这里发生了什么。
【问题讨论】:
标签: opencv image-processing opencv3.0 opencv4android opencv-contour