Python 为什么不';我的旋转图像是否正确保存?
我需要旋转大约150个不同数量的图像,这样我就可以用边界框正确地注释我的数据。问题是,由于某种原因,在运行我的代码并输入一些值后,图像文件没有被保存和旋转。如何以旋转的方式保存这些图像,以便在重新打开图像文件时它已经旋转 该文件应该被正确覆盖,因为我已经完全删除了该文件,并以相同的名称保存了一个新文件Python 为什么不';我的旋转图像是否正确保存?,python,image,rotation,overwrite,ndimage,Python,Image,Rotation,Overwrite,Ndimage,我需要旋转大约150个不同数量的图像,这样我就可以用边界框正确地注释我的数据。问题是,由于某种原因,在运行我的代码并输入一些值后,图像文件没有被保存和旋转。如何以旋转的方式保存这些图像,以便在重新打开图像文件时它已经旋转 该文件应该被正确覆盖,因为我已经完全删除了该文件,并以相同的名称保存了一个新文件 import os from skimage import io, transform import cv2 from scipy import ndimage import scipy.misc
import os
from skimage import io, transform
import cv2
from scipy import ndimage
import scipy.misc
folder_name = r'C:\Users\admin\Desktop\Pedro_Database\Setup_Data\test'
with os.scandir(folder_name) as folder:
for file in folder:
if (file.name.endswith('.bmp')):
path = folder_name + '/' + file.name
img = cv2.imread(path)
rotate = 360
rotated_img = img
while(rotate != 0):
cv2.imshow('image',rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
rotate = int(input("Rotate By: "))
rotated_img = ndimage.rotate(img, rotate, reshape=False)
#os.remove(path)
cv2.imwrite(path, rotated_img)
print(file.name + " saved")
在两张照片上运行此代码并正常终止后,我重新打开图像文件,它们100%不变。我不习惯打开CV,但我认为问题出在这一行
cv2.imwrite(path, rotated_img)
它必须放在while
循环中,这样当图像被旋转时,图像就会被写入(保存)。如果不是,则当退出while循环时,rotated\u img
将保持不变,如rotate=0
此外,如果要保存所有旋转图像,则应考虑更改<代码>路径<代码>,例如:<代码>路径=路径+STR(i)< /代码>,其中<代码> i>代码>增加1。
i=0
同时(旋转!=0):
cv2.imshow(“图像”,旋转图像)
cv2.等待键(0)
cv2.destroyAllWindows()
旋转=整数(输入(“旋转方式:”)
旋转的\u img=nImage.rotate(img,旋转,重塑=False)
i+=1
旋转图像的路径=路径+str(i)
cv2.imwrite(旋转图像的路径,旋转的img)
打印(file.name+“已保存”)#如果要打印
我不习惯opencv,但我认为问题出在这一行
cv2.imwrite(path, rotated_img)
它必须放在while
循环中,这样当图像被旋转时,图像就会被写入(保存)。如果不是,则当退出while循环时,rotated\u img
将保持不变,如rotate=0
此外,如果要保存所有旋转图像,则应考虑更改<代码>路径<代码>,例如:<代码>路径=路径+STR(i)< /代码>,其中<代码> i>代码>增加1。
i=0
同时(旋转!=0):
cv2.imshow(“图像”,旋转图像)
cv2.等待键(0)
cv2.destroyAllWindows()
旋转=整数(输入(“旋转方式:”)
旋转的\u img=nImage.rotate(img,旋转,重塑=False)
i+=1
旋转图像的路径=路径+str(i)
cv2.imwrite(旋转图像的路径,旋转的img)
打印(file.name+“已保存”)#如果要打印
I重新打开图像文件,它们100%不变。文件时间戳是否已更新?是的,时间戳已更新,即使在os.remove()命令仍有注释的情况下。您如何检查它们是否已更改?很多程序都会执行某种类型的缓冲,可能是查看器没有正确更新?(即,您上面的代码正在工作???)。图像保存为.bmp格式。我已经在默认的microsoft viewer和paint中打开了它,并将对我来说非常重要的应用程序标记为。请尝试将rotate=360
更改为其他内容(例如,rotate=180
),以确保while和rotate(angle)都输入正确。如果出现一些奇怪的错误,默认的rotate=360
意味着您将看不到实际的旋转。如果您的图像都旋转了180度,那么while条件和循环有点奇怪。我重新打开图像文件,它们100%不变。文件时间戳是否已更新?是的,时间戳已更新,即使在os.remove()命令仍被注释掉的情况下。您如何检查它们是否已更改?很多程序都会执行某种类型的缓冲,可能是查看器没有正确更新?(即,您上面的代码正在工作???)。图像保存为.bmp格式。我已经在默认的microsoft viewer和paint中打开了它,并将对我来说非常重要的应用程序标记为。请尝试将rotate=360
更改为其他内容(例如,rotate=180
),以确保while和rotate(angle)都输入正确。如果出现一些奇怪的错误,默认的rotate=360
意味着您将看不到实际的旋转。如果你的图像都旋转了180度,那么while条件和循环就有点奇怪了。我真不敢相信我没有看到那个愚蠢的小错误。谢谢真不敢相信我没看到那个愚蠢的小错误。谢谢