使用Python删除多个图像(os.remove)

时间:2017-07-26 07:50:55

标签: python

我有一个基本问题:我无法删除文件夹中的多个文件。如下所示,我首先进行一些检查(给src,检查文件是否存在,打印宽度和高度,然后是像素区域)。

我想删除所有给定像素区域小于我给出的值的.jpg文件。代码执行,没有错误,但文件仍然存在。使用一个单独的文件(所以给出完整路径..)它有效,有多个(就像在我的问题中)它没有。

import numpy as np
import cv2
import os
from datetime import datetime

now = datetime.now()
id_folder = now.strftime('%Y%m%d-%H%M%S-%f')

src = ('C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\')
files = os.listdir(src)

img = cv2.imread(src + str(files[0]), 0)
print(img)
height = np.size(img, 0)
width = np.size(img, 1)
print(height, width)

pixel_area = height*width
print(pixel_area)

for image_file_name in os.listdir('C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\'):
    if image_file_name.endswith(".jpg") and pixel_area <= 140:
        os.remove('C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\' + image_file_name)

在文件夹中,有多个图像具有不同的区域。我想要的只是删除它们中的某些,只有宽度*高度低于我给出的值。

这是一个例子

example

我想删除红色矩形中的图像并保持绿色,只是因为它们的像素区域(我可以说宽高比?)更大。

1 个答案:

答案 0 :(得分:2)

这可能会让你更接近。我在下面添加了评论,以帮助确定我建议的更改......

import numpy as np
import cv2
import os
from datetime import datetime

now = datetime.now()
id_folder = now.strftime('%Y%m%d-%H%M%S-%f')

无需将字符串放入括号中。此外,在您拥有相同字符串的每个地方,我都使用变量名src替换它。

src = 'C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\'
files = os.listdir(src)

我将图像大小调整代码移动到for循环中,以便检查每个图像然后调整该图像的大小。

for image_file_name in os.listdir(src):
    img = cv2.imread(src + image_file_name, 0)
    print(img)
    height = np.size(img, 0)
    width = np.size(img, 1)
    print(height, width)

    pixel_area = height * width
    print(pixel_area)

    if image_file_name.endswith(".jpg") and pixel_area <= 140:
        os.remove(src + image_file_name)