我正在尝试从 opencv 读取轮廓并将其传输到 matplotlib 进行显示。这是我的代码。
我该怎么办?
img = cv2.imread('sample.jpeg')
_, bin_img = cv2.threshold(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), 180, 255,
cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(bin_img, mode, method)
plt.contour(contours)
它抛出一个错误:
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (111,) + inhomogeneous part.
99% 的情况下,您会希望在开始使用的图像或新图像中绘制轮廓,并且有许多轻松的方法可以做到这一点。 OpenCV 文档。 matplotlib“轮廓”函数用于绘制 3D 数据,例如一张旧学校地图,用等高线显示山的海拔。 matplotlib 有一个“contour”函数,与 opencv 中的“contour”对象同名,这只是一个巧合。
要在 matplotlib 中绘制轮廓,您需要将其转换为 x 坐标和 y 坐标数组。
#Simple closed hexagon
contour = np.array([[[10, 0]],
[[0, 20]],
[[10, 40]],
[[30, 40]],
[[40, 20]],
[[30, 0]],
[[10, 0]]])
#Slice the first column from the contour's array
x_coords = contour[:,0][:,0]
#Slice the second column from the contour's array
y_coords = contour[:,0][:,1]
#Initialise a matplotlib figure and axis
fig, ax = plt.subplots(1,1)
#plot the contours coordinates
ax.plot(x_coords, y_coords, marker='.')
#show the plot
plt.show()