我试图使用 Python 旋转图像,并且我认为旋转图像的逻辑是正确的,但是每当我尝试使用 OpenCV 显示旋转后的图像时,我都会收到以下错误:
类型错误:参数 '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()
Run Code Online (Sandbox Code Playgroud)
在你的情况下尝试更换
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
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您将列与行混合在一起。
哦,并尝试np.zeros((height, width, num_channels))尽可能多地用于创建空白图像。
| 归档时间: |
|
| 查看次数: |
34787 次 |
| 最近记录: |