gpt4 book ai didi

android - 等高线图 OpenCV4Android 库

转载 作者:太空宇宙 更新时间:2023-11-03 21:47:37 26 4
gpt4 key购买 nike

我正在使用 OpenCv4Android 库,并通过示例程序 color-blob-detection。在这种情况下,为了绘制轮廓,他们首先使用表达式对其进行过滤: (轮廓面积>0.1*(最大轮廓面积)

 if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) {
Core.multiply(contour, new Scalar(4,4), contour);
mContours.add(contour);

然后他们对每个过滤后的轮廓使用标量乘法。它的目的是什么?是合并几个小轮廓吗?没明白。请赐教!! 第二件事,为什么他们使用乘法因子 Scalar(4,4),为什么不使用其他的。

代码:

    Imgproc.pyrDown(rgbaImage, mPyrDownMat);
Imgproc.pyrDown(mPyrDownMat, mPyrDownMat);

Imgproc.cvtColor(mPyrDownMat, mHsvMat, Imgproc.COLOR_RGB2HSV_FULL);

Core.inRange(mHsvMat, mLowerBound, mUpperBound, mMask);
Imgproc.dilate(mMask, mDilatedMask, new Mat());

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();

Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);

// Find max contour area
double maxArea = 0;
Iterator<MatOfPoint> each = contours.iterator();
while (each.hasNext()) {
MatOfPoint wrapper = each.next();
double area = Imgproc.contourArea(wrapper);
if (area > maxArea)
maxArea = area;
}

// Filter contours by area and resize to fit the original image size
mContours.clear();
each = contours.iterator();
while (each.hasNext()) {
MatOfPoint contour = each.next();
if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) {
Core.multiply(contour, new Scalar(4,4), contour);
mContours.add(contour);

Imgproc.drawContours(mRgba, mContours, -1, CONTOUR_COLOR);

最佳答案

如果您查看代码,您会发现他们首先使用的是:

Imgproc.pyrDown(rgbaImage, pyrDownMat); //Divide length and height by 2
Imgproc.pyrDown(pyrDownMat, pyrDownMat); //Divide length and height by 2

在这些行中,框架的长度和高度除以四,这将减少所需的处理时间。为了将轮廓放回原始框架,他们必须将长度和高度调整为 4,这就是使用这条线的原因。

new Scalar(4,4)

我希望我说清楚了;)

关于android - 等高线图 OpenCV4Android 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14855905/

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