gpt4 book ai didi

python - 从 openCV 轮廓创建路径

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

嗨,我想在这 video 中做类似的事情.在 V-rep 系统中使用 python API,现在我的机器人正在工作,只需要处理我想绘制的图像。

为此,我需要一个笔路径的 (x,y) 坐标向量。所以我正在尝试使用 OpenCV findContours 函数。这是我的代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg', 3)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

edges,contours,hierarchy = cv2.findContours(gray, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

xList = [x[0][0][0] for x in contours]
yList = [y[0][0][1] for y in contours]

#plot image
plt.subplot(121)
plt.imshow(img,cmap = 'gray')
plt.title('Original Image')

#plot contour
plt.subplot(122)
plt.plot(xList,yList)
plt.title('Edge Image')

plt.show()

这是我的示例图片:

enter image description here

以及如果我使用散点图单独绘制每个点的结果,它会显示图像的轮廓。

enter image description here

好吧,这可能不是我第一次使用 OpenCV 寻找轮廓的最佳示例。

如果我使用 plot 函数绘制点,以查看我想要遵循的路径,我会得到:

enter image description here

所以我想要的是找到对连续顺序路径上的所有点进行排序以绘制图像轮廓的方法。

这里的问题是点是未排序的,所以 don 与其前一个点和下一个点有关系,它们只是点云。所以我需要对其进行排序以构建路径。

知道如何做到这一点吗?

最佳答案

1.你想创建一些这样的东西:

基本步骤是:

  1. Read and convert to gray,
  2. Threshold to binary image
  3. Do findContours on binary-imaget
  4. Then drawContours, you'll get it.

2.如果你想得到这样的想法:

enter image description here

基本步骤是:

  1. Read and convert to gray
  2. Blur and do Canny
  3. Find by connectedComponents
  4. Then set the labels to different colors
  5. You will get like that.

enter image description here


生成最后一张图片的代码:

#!/usr/bin/python3
# 2018.01.23 11:25:35 CST
# 2018.01.23 11:45:22 CST

import numpy as np
import cv2
import myutils

colors = [(0, 0, 255), (0, 43, 255), (0, 85, 255), (0, 128, 255), (0, 170, 255), (0, 213, 255), (0, 255, 255), (0, 255, 212), (0, 255, 170), (0, 255, 127), (0, 255, 85), (0, 255, 42), (0, 255, 0), (43, 255, 0), (85, 255, 0), (128, 255, 0), (170, 255, 0), (213, 255, 0), (255, 255, 0), (255, 212, 0), (255, 170, 0), (255, 127, 0), (255, 85, 0), (255, 42, 0), (255, 0, 0)]

img = cv2.imread("leaf.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(img, 3)
edged = cv2.Canny(gray, 50, 200)

## Find connected edges
ret, labels = cv2.connectedComponents(edged)

## Draw(set to different colors)
canvas = np.zeros_like(img, np.uint8)
for i in range(1,ret):
pts = labels == i
canvas[pts] = colors[i%len(colors)]

## Display
cv2.imshow("res", canvas);cv2.waitKey();cv2.destroyAllWindows()
cv2.imwrite("res.png", canvas)

但是注意,我设置不同颜色的边,而不同颜色的点可能不是真实路径.

关于python - 从 openCV 轮廓创建路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48356874/

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