【问题标题】:Loop through directory of images and rotate them all x degrees and save to directory遍历图像目录并将它们全部旋转 x 度并保存到目录
【发布时间】:2017-06-23 18:43:14
【问题描述】:
我正在使用 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()
【问题讨论】:
标签:
python
image
opencv
rotation
scipy
【解决方案1】:
您需要在旋转它们之前实际读取图像文件。您当前的代码所做的只是遍历文件(和目录)的名称。
os.listdir(path) 为您提供文件夹的内容列表(基本上只是名称),然后您需要使用 ndimage.imread() 函数。
这应该可行:
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?