python - 使用 openCV 检测线的孔、末端和起点?

标签 python opencv tracking detect

我正在尝试创建一个 Python 脚本来检测线的空洞、结束和开始。我认为 openCV 可以很好地实现这一目标。

例如,一切都以这张图片开头:

enter image description here

最后我想要实现的是:

enter image description here

所以我开始将图像导入 Python 并将其转换为灰度。现在我想到了使用 goodFeaturesToTrack() 方法来跟踪漏洞的想法。它通常用于查找图像中的角点。

然而,这并不是很好,因为在那之后脚本知道了点,但它不知道点是来自洞还是线的起点或终点。另一个问题是,如果我使用另一个图像,此方法会检测到更多的点,而不仅仅是线的孔、起点和终点。

这是我的完整代码,可以更好地理解我的问题:

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

# lodes in img

img = cv2.imread('png1.png', cv2.IMREAD_COLOR)
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

corners = cv2.goodFeaturesToTrack(img_gray, 200, 0.05, 10)

for corner in corners:
    x, y = corner.ravel()
    cv2.circle(img, (x,y), 7, (255,255,0), -1)

cv2.imshow('img',img)

我不知道如何解决这个问题。

最佳答案

我添加了一个 func getLandmarks() 它返回所有的整体。所以这里我假设如果在30pix的半径范围内有2个角就会被算作一个洞

if abs(x1-x2)<=30 and abs(y1-y2)<=30:

这一行定义了范围。

import cv2
import numpy as np

def getLandmarks(corners):
    holes=[]
    for i in range(0,len(corners)):
        for j in range(i+1,len(corners)):
            x1,y1=corners[i].ravel()
            x2,y2=corners[j].ravel()
            if abs(x1-x2)<=30 and abs(y1-y2)<=30:
                holes.append((int((x1+x2)/2),int((y1+y2)/2)))
    return holes

# lodes in img

img = cv2.imread('img.png', cv2.IMREAD_COLOR)
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

corners = cv2.goodFeaturesToTrack(img_gray, 200, 0.05, 10)

holes=getLandmarks(corners)
print len(holes)
for corner in holes:
    cv2.circle(img, (corner), 7, (255,255,0), -1)

cv2.imshow('img',img)
cv2.waitKey(0)

输出

enter image description here

现在开始和结束 你可以轻松地在 X(如果路径是从左到右)或 Y(如果路径是从上到下)中对角进行排序,最小值和最大值将是你的开始和结束!

关于python - 使用 openCV 检测线的孔、末端和起点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847990/

相关文章:

python - 如何检查字符串是否是有效的python代码(运行时错误)

python - Python 中损坏的调用函数

python - Numpy:如何删除 2 个矩阵共有的行

visual-c++ - OpenCV图像显示失败

c++ - 将 Mat 压缩成 Jpeg 并将结果存入内存

android - 实时分享GPS位置

javascript - 使用主题标签在 1 页网站上跟踪 Google Analytics

python - 我可以使用 pygtk 为 fedora 编写 GUI 吗?

Git:有没有一种简单的方法来设置新分支来跟踪远程分支?

python - 为所有 conda 环境安装 OpenCV