TypeError: descriptor 'calc' for 'cv2.DenseOpticalFlow' objects doesn't apply to a 'numpy.ndarray' object 如何解决
时间: 2024-01-15 19:04:45 浏览: 116
这个错误提示表明您正在尝试在一个numpy数组对象上调用cv2.DenseOpticalFlow的calc方法,而不是在cv2.DenseOpticalFlow对象上调用该方法。因此,您需要先创建一个cv2.DenseOpticalFlow对象,然后再调用该对象的calc方法。
以下是一个示例代码,演示如何解决这个问题:
```
import cv2
import numpy as np
# 创建cv2.DenseOpticalFlow对象
flow = cv2.DualTVL1OpticalFlow_create()
# 读取两张图像作为输入
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 将图像转换为灰度图像
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 计算光流
flow_result = flow.calc(gray1, gray2, None)
# 显示结果
cv2.imshow('Optical Flow Result', flow_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的示例中,我们首先创建了一个cv2.DenseOpticalFlow对象(使用cv2.DualTVL1OpticalFlow_create()),然后使用它来计算两张输入图像之间的光流。最后,我们将计算结果显示在屏幕上。
阅读全文