为什么我的旋转图像没有正确保存?

Why aren't my rotated images being saved properly?

我需要旋转大约 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% 没有改变。

我不习惯opencv,但我认为问题出在这一行

cv2.imwrite(path, rotated_img)

它必须放在while循环中,这样当图像旋转rotated_img = ndimage.rotate(img, rotate, reshape=False)时,它就会被写入(保存)。如果不是,您的 rotated_img 将在退出 while 循环时与 rotate = 0 保持不变。

另外,如果你想保存所有个旋转的图片,你应该考虑改变path,例如:path = path + str(i),其中i 增加 1.

i = 0
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)
    i += 1
    path_of_rotated_image = path + str(i)
    cv2.imwrite(path_of_rotated_image, rotated_img)
    print(file.name + " saved") # if you want to print