python + openCV:仅大小为1的数组可以转换为Python标量

时间:2019-01-29 21:44:53

标签: python opencv

这是我的代码,用于使用cv2.getRotationMatrix2D()函数旋转img。

smoothed_angle = 0

img = cv2.imread("/home/hp/self driving car/steering_wheel_image.png")
print(img.shape) #outputs (240, 240, 3)
rows = img.shape[0]
print(rows) #outputs 240
cols = img.shape[1]
print(cols) #outputs 240

M = cv2.getRotationMatrix2D((cols/2,rows/2),-smoothed_angle,1)

我遇到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-37-55419a87d5b5> in <module>()
     34 #and the predicted angle
     35 smoothed_angle += 0.2 * pow(abs((predicted_angle_degree - smoothed_angle)), 2.0 / 3.0) * (predicted_angle_degree - smoothed_angle) / abs(predicted_angle_degree - smoothed_angle)
---> 36 M = cv2.getRotationMatrix2D((cols/2,rows/2),-smoothed_angle,1)
     37 dst = cv2.warpAffine(img,M,(cols,rows))
     38 #cv2.imshow("steering wheel", dst)

TypeError: only size-1 arrays can be converted to Python scalars

此外,print(type(smoothed_angle))提供以下输出:

<class 'numpy.ndarray'>

1 个答案:

答案 0 :(得分:4)

在示例脚本不会因为它是写返回一个错误。但是在错误输出中,第35行显示:

     35 smoothed_angle += 0.2 * pow(abs((predicted_angle_degree - smoothed_angle)), 2.0 / 3.0) * (predicted_angle_degree - smoothed_angle) / abs(predicted_angle_degree - smoothed_angle)

这不是示例脚本中的内容,但可能是问题的根源(或示例中未包含的另一步骤)。如果您以smoothed_angle = 0开头,但predicted_angle_degree是一个数组而不是标量(例如predicted_angle_degree = np.array([0,0])),则会导致显示错误。所以它看起来是,该错误是由于smoothed_angle不是标量。

使用类型info 更新:如smoothed_angle的类型所示,它不是标量,或者将打印<type 'int'><type 'float'>。如果smoothed_angle确实像示例中那样是标量开始的,那么它将被示例中未提供的另一个函数(例如第35行中的函数)更改。这也意味着另一个用于更新{{ 1}},例如smoothed_angle,还具有类型predicted_angle_degree