循环浏览图像目录并将它们全部旋转x度并保存到目录

时间:2017-02-06 18:00:39

标签: python image opencv rotation scipy

我正在使用Python,Open,Numpy和Scipy。我有一个想要按特定角度旋转的图像目录。我想编写这个脚本。我正在使用它,OpenCV Python rotate image by X degrees around specific point但它似乎并没有像我想象的那样进行管道传输。我得到了一个无效的轮换计划,但我不认为我应该得到这个。

以下是我的代码:

from scipy import ndimage
import numpy as np
import os
import cv2

def main():
    outPath = "C:\Miniconda\envs\.."
    path = "C:\Miniconda\envs\out\.."
    for image_to_rotate in os.listdir(path):
        rotated = ndimage.rotate(image_to_rotate, 45)
        fullpath = os.path.join(outPath, rotated)

  if __name__ == '__main__':
     main()

1 个答案:

答案 0 :(得分:7)

在旋转之前,您需要实际读取图像文件。您当前的代码所做的只是遍历文件(和目录)的名称。

os.listdir(path)为您提供了该文件夹的内容列表(基本上只是名称),然后您需要使用 ndimage.imread()<打开这些文件/ em>功能。

这应该有效:

from scipy import ndimage, misc
import numpy as np
import os
import cv2

def main():
    outPath = "C:\Miniconda\envs\.."
    path = "C:\Miniconda\envs\out\.."

    # iterate through the names of contents of the folder
    for image_path in os.listdir(path):

        # create the full input path and read the file
        input_path = os.path.join(path, image_path)
        image_to_rotate = ndimage.imread(input_path)

        # rotate the image
        rotated = ndimage.rotate(image_to_rotate, 45)

        # create full output path, 'example.jpg' 
        # becomes 'rotate_example.jpg', save the file to disk
        fullpath = os.path.join(outPath, 'rotated_'+image_path)
        misc.imsave(fullpath, rotated)

if __name__ == '__main__':
    main()

PS:这种迭代文件夹内容的方式只有在目录中只有文件且没有子目录时才有效。 os.listdir(path)将返回任何文件和子目录的名称。

您可以在此帖子中了解如何仅列出目录中的文件:How to list all files of a directory?