我正在使用 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)
什么都没有出现。
有解决方案吗? 非常感谢您的帮助。
答案 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)