gpt4 book ai didi

python - OpenCV - 可视化使用 cv2.approxPolyDP() 提取的多边形曲线

转载 作者:太空狗 更新时间:2023-10-29 17:26:26 26 4
gpt4 key购买 nike

我想可视化用 cv2.approxPolyDP() 提取的多边形曲线。这是我正在使用的图像:

map of UK

我的代码尝试隔离主岛并定义和绘制等高线近似值和等高线外壳。我绘制了绿色的轮廓,红色的近似值:

import numpy as np
import cv2

# load image and shrink - it's massive
img = cv2.imread('../data/UK.png')
img = cv2.resize(img, None,fx=0.25, fy=0.25, interpolation = cv2.INTER_CUBIC)

# get a blank canvas for drawing contour on and convert img to grayscale
canvas = np.zeros(img.shape, np.uint8)
img2gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# filter out small lines between counties
kernel = np.ones((5,5),np.float32)/25
img2gray = cv2.filter2D(img2gray,-1,kernel)

# threshold the image and extract contours
ret,thresh = cv2.threshold(img2gray,250,255,cv2.THRESH_BINARY_INV)
im2,contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)


# find the main island (biggest area)
cnt = contours[0]
max_area = cv2.contourArea(cnt)

for cont in contours:
if cv2.contourArea(cont) > max_area:
cnt = cont
max_area = cv2.contourArea(cont)

# define main island contour approx. and hull
perimeter = cv2.arcLength(cnt,True)
epsilon = 0.01*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)

hull = cv2.convexHull(cnt)

# cv2.isContourConvex(cnt)

cv2.drawContours(canvas, cnt, -1, (0, 255, 0), 3)
cv2.drawContours(canvas, approx, -1, (0, 0, 255), 3)
## cv2.drawContours(canvas, hull, -1, (0, 0, 255), 3) # only displays a few points as well.

cv2.imshow("Contour", canvas)
k = cv2.waitKey(0)

if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()

这是生成的图像:

enter image description here

第一张图片以绿色绘制轮廓。第二个以红色绘制近似值 - 如何将此近似值绘制为连续闭合曲线?

documentation不是很清楚,tutorial 也不是,但我的理解是 cv2.approxPolyDP() 应该定义一条连续的闭合曲线,我应该能够用 cv2.drawContours() 绘制它。那是对的吗?如果是这样,我做错了什么?

最佳答案

问题仅在于可视化:drawContours 需要轮廓数组(在 python 的情况下为列表),而不仅仅是一个 numpy 数组(从 approxPolyDP 返回)。

解决方法如下:替换

cv2.drawContours(canvas, approx, -1, (0, 0, 255), 3)

cv2.drawContours(canvas, [approx], -1, (0, 0, 255), 3)

关于python - OpenCV - 可视化使用 cv2.approxPolyDP() 提取的多边形曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879315/

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