使用网络摄像头OpenCV有多条线将斑点连接到屏幕中心

时间:2019-02-05 19:39:16

标签: python opencv

我正在使用 OpenCV BlobDetection 来检测出现在网络摄像头中的Blob。我正在尝试使用cv2.arrowedLine函数在每个 blob 的中心到屏幕中间绘制线条。

我具有每个斑点的坐标

pts = [k.pt for k in keypoints]

当我尝试使用时

cv2.arrowedLine(img=frame, pt1=(centre), pt2=(int(pts)), color=(0,0,255), thickness=2)

什么都没有出现。

有解决方案吗? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

也许先输入一些代码

# Standard imports
import cv2
import numpy as np

# Read image
im = cv2.imread("blob.jpg", cv2.IMREAD_GRAYSCALE)

# Set up the detector with default parameters.
detector = cv2.SimpleBlobDetector_create()

# Detect blobs.
keypoints = detector.detect(im)

我想你已经走了这么远。现在,当您运行以下行

pts = [k.pt for k in keypoints]

pts是[(x, y), (x, y), ... ]形式的坐标元组列表。 Opencv无法在单个点center和点列表之间绘制箭头。因此,我们必须像这样在for循环中进行遍历

pts = [k.pt for k in keypoints]
centre = (200, 320) # This should be changed to the center of your image

for pt in pts:
    pt = tuple(map(int, pt))
    cv2.arrowedLine(img=im, pt1=(centre), pt2=(pt), color=(0, 0, 255), thickness = 2)

pt = tuple(map(int, pt))用于将列表中的所有数字映射为整数。仅仅调用int(list)是行不通的。

如果您查看结果,那就是我想的那样。

# Show keypoints
cv2.imshow("Keypoints", im)
cv2.waitKey(0)

blobs before arrows blobs with arrows