TypeError:参数'应为cv::UMat;垫';使用OpenCV在Python中旋转图像时

TypeError:参数'应为cv::UMat;垫';使用OpenCV在Python中旋转图像时,python,opencv,Python,Opencv,我尝试使用Python旋转图像,我认为旋转图像的逻辑是正确的,但每当我尝试使用OpenCV显示旋转后的图像时,我都会出现以下错误: TypeError:参数“mat”应为cv::UMat 我是Python新手,第一次使用OpenCV,所以对此我没有太多想法。旋转图像的类型是numpy.ndarray,我认为OpenCV可以在nd.array 这是我的密码: 导入cv2 将numpy作为np导入 def(图像处理): imageProcessing=imageProcessing[:-1] Rot

我尝试使用Python旋转图像,我认为旋转图像的逻辑是正确的,但每当我尝试使用OpenCV显示旋转后的图像时,我都会出现以下错误:

TypeError:参数“mat”应为cv::UMat

我是Python新手,第一次使用OpenCV,所以对此我没有太多想法。旋转图像的类型是
numpy.ndarray
,我认为OpenCV可以在
nd.array

这是我的密码:

导入cv2
将numpy作为np导入
def(图像处理):
imageProcessing=imageProcessing[:-1]
RotateImage=np.数组([[None for z in range(3)]for x in range(len(图像处理))]for y in range(len(图像处理[0]))
对于范围内的i(len(图像处理[0]):
对于范围内的j(len(图像处理)):
对于范围(3)内的k:
旋转图像[i][j][k]=图像处理[j][i][k]
返回旋转图像
image=cv2.imread(“下载(2.jpg)”,1)
打印(“原始图像”。居中(50,=”)
打印(图像)
cv2.imshow(“原始”,图像)
cv2.等待键(0)
打印(类型(图像))
旋转90=旋转90(图像)
打印(“旋转图像”。居中(50,=”)
打印(旋转90度)
打印(类型(旋转90))
cv2.imshow(“旋转”,旋转90度)
cv2.等待键(0)
cv2.destroyAllWindows()

在您的情况下,尝试更换

def旋转90(图像处理):
imageProcessing=imageProcessing[:-1]
RotateImage=np.数组([[None for z in range(3)]for x in range(len(图像处理))]for y in range(len(图像处理[0]))
对于范围内的i(len(图像处理[0]):
对于范围内的j(len(图像处理)):
对于范围(3)内的k:
旋转图像[i][j][k]=图像处理[j][i][k]
返回旋转图像

def旋转90(图像处理):
h、 w,c=图像处理.shape
旋转图像=np.0((h,w,c),数据类型=np.uint8)
imageProcessing=imageProcessing[:-1]
对于范围(h)内的i:
对于范围(w)内的j:
对于范围(3)内的k:
旋转图像[i][j][k]=图像处理[j][i][k]
返回旋转图像
在您的例子中,列与行混合


哦,试着使用np.zero((高度、宽度、数量通道))尽可能多地创建空白图像。

我也有同样的问题,并使用了:

image=np.uint8(image)

其中image是您的cv.imread()对象。

检查您的
图像是否为numpy。如果不是,请将其转换为numpy:

image = np.array(image)

cv2.imshow('show', image)
cv2.waitKey(0)

您定义空图片的方式是一个问题,这里有一个更多的信息,感谢您在我将rotateImage=np.zeros([h,w,c],dtype=np.uint8]更改为rotateImage=np.zeros([w,h,c],dtype=np.uint8])后帮助我们编写的代码,我认为没有必要减去1(h=h-1,w=w-1),因为它给出了索引越界错误