gpt4 book ai didi

python - 在没有外部功能的情况下旋转图像

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:39 25 4
gpt4 key购买 nike

我有一张使用 scipy.misc.imread 读取的图像。

枢轴 ([0,0]) 位于图像的左上角。我想顺时针翻转 90 度。

我得到的结果是:

enter image description here

我希望你能找到错误,我该如何解决:

  1. 对于点 (x,y) 和图像大小 h=Image_Hieght-1w=Image_Width-1,我将枢轴更改为位于图形的中心。 (x,y) -> (x-w/2,y-h/2)

  2. 现在我可以使用将一个点顺时针旋转 90 度的线性变换:

    • (1,0) -> (0,-1)
    • (0,-1) -> (1,0)
    • 结论:(x1,y1) -> (y1,-x1) ==> (x - w/2,y - h/2) -> (y-h/2 ,w/2 - x)
  3. 现在,我需要将点移回原始图形(在我执行 (x,y) -> (x-w/2,y-h/2) 之前):(y-h/2,w/2 - x) -> (y-h/2+h/2,w/2 - x+w/2) = (y,w-x)

    • 在我使用的代码中 i,j (i = row, j= column), 所以 (y ,w-x) == (-j+w,i)

结论:

def movePointBy90(hieght, width, i, j):
iNew = -j + width - 1
jNew = i
return int(iNew), int(jNew)

其余代码:

image1 = imread('image.jpg')
image2 = np.zeros([image1.shape[1], image1.shape[0], image1.shape[2]])
print(image1.shape)
print(image2.shape)
for c in range(2):
for i in range(image1.shape[0]-1):
for j in range(image1.shape[1]-1):
newPoint = moveBy90(image1.shape[0], image1.shape[1], i, j)
image2[newPoint[0], newPoint[1], c]=image1[i,j,c]


plt.subplot(1, 2, 1)
plt.imshow(image1)

plt.subplot(1, 2, 2)
plt.imshow(image2)
plt.show()

更新:

改成后(我以为range是近距离):

for c in range(3):
for i in range(image1.shape[0]):
for j in range(image1.shape[1]):

enter image description here

最佳答案

您的图像有多少个 channel ?当我在 for 循环中更改 c 变量的范围时,它可以正常工作。来自

for c in range(2):

我认为这是 numpy/matplotlib 与图像像素值的问题。如果您的强度值在 [0,255] 范围内而不是 [0,1],您应该首先执行

image1 = image1 / 255

阅读您的图片后,它会正确显示。

更新:我用你的图像运行下面的代码并得到显示的结果,重要的一点是指定新初始化数组的数据类型。

import numpy as np
import matplotlib.pyplot as plt

def moveBy90(hieght, width, i, j):
iNew = -j + width - 1
jNew = i
return int(iNew), int(jNew)

image1 = plt.imread('3PWin.png')
image2 = np.zeros([image1.shape[1], image1.shape[0], image1.shape[2]], dtype=image1.dtype)
for c in range(4):
for i in range(image1.shape[0]-1):
for j in range(image1.shape[1]-1):
newPoint = moveBy90(image1.shape[0], image1.shape[1], i, j)
try:
image2[newPoint[0], newPoint[1], c]=image1[i,j,c]
except IndexError as error:
print(error)

plt.subplot(1, 2, 1)
plt.imshow(image1)

plt.subplot(1, 2, 2)
plt.imshow(image2)
plt.show()

result of your example image

关于python - 在没有外部功能的情况下旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51467937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com