1

我需要围绕 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% 未更改。

4

1 回答 1

0

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

cv2.imwrite(path, rotated_img)

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

另外,如果要保存所有旋转的图像,则应考虑更改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
于 2019-06-18T17:57:10.930 回答