Cv2.ApproxPolydp()返回什么?ApproxPolydp

由网友(深情迎冷风)分享简介:我正在尝试根据应用cv2.approxPolyDP() 后检测到的轮廓调整图像的大小。然后,我必须根据cv2.approxPolyDP()检测到的轮廓返回值使用cv2.resize()自定义裁剪,并根据cv2.approxPolyDP()检测到的轮廓返回值进行裁剪。我想知道哪个索引是高度,哪个索引是宽度,或者起始x,...我正在尝试根据应用cv2.approxPolyDP() 后检测到的轮廓调整图像的大小。然后,我必须根据cv2.approxPolyDP()检测到的轮廓返回值使用cv2.resize()自定义裁剪,并根据cv2.approxPolyDP()检测到的轮廓返回值进行裁剪。

我想知道哪个索引是高度,哪个索引是宽度,或者起始x,y坐标和结束x,y坐标。

def biggestContour(contours):
    biggest = np.array([])
    max_area = 0
    for i in contours:
        area = cv2.contourArea(i)
        if area > 5000:
            peri = cv2.arcLength(i, True)
            approx = cv2.approxPolyDP(i, 0.02 * peri, True)
            if area > max_area and len(approx) == 4:
                biggest = approx
                max_area = area
    return biggest,max_area

考虑这段代码,我如何找到哪个索引是高度,哪个索引是宽度,或者起始x,y坐标和结束x,y坐标?

推荐答案

注意 10月4日起亚马逊禁止卖家用免费产品或折扣换取review

cv2.approxPolyDP返回重新采样的等高线,因此这仍将返回一组(x, y)点。如果你想裁剪出这个结果,返回的轮廓应该是一个N x 1 x 2NumPy数组,所以去掉单值维度,然后在x和y坐标上执行标准的最小/最大运算,得到左上角和右下角,最后进行裁剪。假设要裁剪的图像名为img,根据cv2.findContours计算的轮廓列表名为contours,请尝试:

# Find biggest contour
cnt, area = biggestContour(contours)

# Remove singleton dimensions
points = np.squeeze(cnt)

# Extract rows and columns
y = points[:, 0]
x = points[:, 1]

# Now crop
(topy, topx) = (np.min(y), np.min(x))
(bottomy, bottomx) = (np.max(y), np.max(x))
out = img[topy:bottomy+1, topx:bottomx+1]

out现在将包含裁剪的图像。

阅读全文

相关推荐

最新文章