【发布时间】:2021-05-13 13:38:17
【问题描述】:
我需要跟踪视频帧中的对象,但为此我必须初始化好的功能来跟踪我的对象。 所以,我有一个 .mp4 文件,我保留了第一帧的蓝色通道并获得了第一帧。然后我继续通过从第一帧中提取我的感兴趣区域来创建我的二进制掩码,并指定我的 ROI 位于 y 轴上的 [300,400] 和 [460,550] x 轴内(这是前面公共汽车)。
然后,我使用 cv2.goodFeaturesToTrack 初始化 10 个角点,其质量级别为 0.01,角点之间的最小允许距离为 10 个像素。然后我尝试在 RGB 图像上显示这些点,但是我没有得到任何点。至于原因我就不知道了。
此处显示:
import numpy as np
import cv2
import matplotlib.pyplot as plt
vid = cv2.VideoCapture('Bus.mp4')
ret, frame = vid.read()
frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
blue_ch = frame[:,:,2]
mask = blue_ch[300:400,460:550]
prev_pts = cv2.goodFeaturesToTrack(image = mask,maxCorners=10,qualityLevel=0.01,minDistance=10,blockSize=10)
blue_ch = np.array(blue_ch)
for i in prev_pts:
x,y = i.ravel()
cv2.circle(blue_ch,(x,y),3,255,-1)
plt.imshow(blue_ch)
【问题讨论】:
-
cv2将图像作为numpy array提供,您不必在blue_ch = np.array(blue_ch)中将numpy array转换为numpy array。 -
首先你可以检查你在变量中得到了什么——即。
print( prev_pts )和print(x,y)。也许您根本看不到这些圆圈,因为它们很小或者它们与背景颜色相同。您是否尝试在原始frame和RGB上绘制它们? -
当我在原始 RGB
frame上绘制圆圈(并显示frame)时,我会在左上角看到小红点。在blue_ch上,它们很小并且与背景相似,所以我看不到它们。