Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不';我的旋转图像是否正确保存?_Python_Image_Rotation_Overwrite_Ndimage - Fatal编程技术网

Python 为什么不';我的旋转图像是否正确保存?

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

我需要旋转大约150个不同数量的图像,这样我就可以用边界框正确地注释我的数据。问题是,由于某种原因,在运行我的代码并输入一些值后,图像文件没有被保存和旋转。如何以旋转的方式保存这些图像,以便在重新打开图像文件时它已经旋转

该文件应该被正确覆盖,因为我已经完全删除了该文件,并以相同的名称保存了一个新文件

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条件和循环就有点奇怪了。我真不敢相信我没有看到那个愚蠢的小错误。谢谢真不敢相信我没看到那个愚蠢的小错误。谢谢