TypeError:使用 OpenCV 在 Python 中旋转图像时,参数“mat”应为 cv::UMat

新手上路,请多包涵

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

TypeError:参数“mat”的预期 cv::UMat

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

这是我的代码:

 import cv2
import numpy as np

def rotateToNinety(imageProcessing):
    imageProcessing = imageProcessing[::-1]
    rotatedImage = np.array([[[None for z in range(3)] for x in range(len(imageProcessing))]for y in range(len(imageProcessing[0]))])

    for i in range(len(imageProcessing[0])):
        for j in range(len(imageProcessing)):
            for k in range(3):
                rotatedImage[i][j][k] = imageProcessing[j][i][k]
    return rotatedImage

image = cv2.imread("download (2).jpg",1)

print("Original Image".center(50,"="))
print(image)

cv2.imshow("Original",image)
cv2.waitKey(0)

print(type(image))

rotated_90 = rotateToNinety(image)
print("Rotated Image".center(50,"="))
print(rotated_90)

print(type(rotated_90))
cv2.imshow("rotated",rotated_90)
cv2.waitKey(0)
cv2.destroyAllWindows()

原文由 Mananjot Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 536
2 个回答

在你的情况下尝试更换

def rotateToNinety(imageProcessing):
    imageProcessing = imageProcessing[::-1]
    rotatedImage = np.array([[[None for z in range(3)] for x in range(len(imageProcessing))]for y in range(len(imageProcessing[0]))])

    for i in range(len(imageProcessing[0])):
        for j in range(len(imageProcessing)):
            for k in range(3):
                rotatedImage[i][j][k] = imageProcessing[j][i][k]
    return rotatedImage

def rotateToNinety(imageProcessing):
    h,w,c = imageProcessing.shape

    rotatedImage = np.zeros((h,w,c), dtype=np.uint8)

    imageProcessing = imageProcessing[::-1]

    for i in range(h):
        for j in range(w):
            for k in range(3):
                rotatedImage[i][j][k] = imageProcessing[j][i][k]
    return rotatedImage

在您的情况下,您的列与行混合在一起。

哦,尽量使用 np.zeros((height, width, num_channels)) 来创建空白图像。

原文由 Oleg Vorobiov 发布,翻译遵循 CC BY-SA 4.0 许可协议

我有同样的问题并使用:

 image=np.uint8(image)

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

原文由 abbas abaei 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题