python + openCV:只有size-1数组可以转换为Python标量

Deb*_*bie 5 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)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

另外,print(type(smoothed_angle))给出以下输出:

<class 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)

A K*_*ger 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)
Run Code Online (Sandbox Code Playgroud)

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

使用类型 info 进行更新:如 的类型所示smoothed_angle,它不是标量,否则会打印<type 'int'>or <type 'float'>。如果smoothed_angle确实像示例中那样以标量开始,那么它会被示例中未给出的另一个函数更改,例如第 35 行中的函数。这也意味着用于更新 的另一个参数(smoothed_angle例如 )predicted_angle_degree也具有类型ndarray

  • 在这种情况下,如果“predicted_angle_ Degree”中的每个元素都针对不同的图像,那么是的,一次使用一个元素来获取每个图像的角度。您还需要为每个图像设置不同的旋转矩阵。是的,您可以使用循环来实现这一点。 (2认同)