【问题标题】:opencv calcOpticalFlowPyrLK imgdepth erroropencv calcOpticalFlowPyrLK imgdepth 错误
【发布时间】:2020-11-18 23:53:31
【问题描述】:

我正在从 opencv 运行 optical flow tutorial,直接的问题是 calcOpticalFlowPyrLK 产生错误 (-215:Assertion failed) img.depth() == CV_8U

我稍微修改了代码以直接读取灰色图像。 old_greyframe_grey 是 uint8 类型的形状 (84,84)。由于 opencv 的另一个问题,需要进行此修改 - 我无法加载视频文件(isopen() 给出 False)(但摄像头流有效)。也因为我最终想要做的是输入 (84,84) numpy 矩阵。

奇怪的是,相同的两个图像适用于 gunnar farneback 算法。 (后续密集光流示例)。但我想要 LK,因为它很稀疏。

环境:conda环境中的windows 10

old_frame =  image.imread("grey-0.png")
old_grey = old_frame#cv2.cvtColor(np.float32(old_frame), cv2.COLOR_BGR2GRAY)
p0 = cv2.goodFeaturesToTrack(old_gray, maxCorners = 50, qualityLevel = 0.3, minDistance = 7,blockSize = 7)#**feature_params)

# Create a mask image for drawing purposes
mask = np.zeros_like(old_frame)

for i in range(1,10):
    frame = image.imread("grey-"+str(i)+".png")

    frame_grey = frame#cv2.cvtColor(np.float32(frame), cv2.COLOR_BGR2GRAY)

    # calculate optical flow
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_grey, frame_grey, p0, None, **lk_params)

【问题讨论】:

    标签: python opencv opencv3.0 opticalflow opencv-python


    【解决方案1】:

    old_greyframe_grey 都需要为 8 位(cv2.CV_8Unp.uint8)。
    你可以这样做

    frame_uint8 = np.uint8(frame_grey)
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_grey, frame_uint8, p0, None, **lk_params)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2014-03-20
      • 2014-07-20
      • 2012-07-26
      • 2016-12-11
      相关资源
      最近更新 更多