python - 如何删除包含超过 90% 黑色像素的图像?
问题描述
我已将图像拆分为多个补丁(块):
但是,我现在想删除包含 90% 以上黑色像素的黑色补丁。目前,我编写了这段代码,但它不起作用,因为它增加了黑色像素的值:
import os
import glob
from PIL import Image
def count(path):
black = nonblack = 0
for filename in glob.glob(path):
img = Image.open(filename)
width = img.width
height = img.height
total = width * height
lower = 90
higher = 100
for pixel in img.getdata():
if pixel == (0, 0, 0):
black += 1
percent = round((black * 100.0/total),1)
if((percent >= lower) & (percent < higher)):
print('yes remove')
os.remove(filename)
break
else:
nonblack += 1
print("black = ", black, " nonblack = ", nonblack)
path = 'C:\\Mypath\\*.jpg'
count(path)
解决方案
您应该在计算完所有像素后进行百分比检查
import os
import glob
from PIL import Image
def count(path):
black = nonblack = 0
for filename in glob.glob(path):
img = Image.open(filename)
width = img.width
height = img.height
total = width * height
lower = 90
higher = 100
for pixel in img.getdata():
if pixel == (0, 0, 0):
black += 1
else:
nonblack += 1
print("black = ", black, " nonblack = ", nonblack)
percent = round((black * 100.0/total),1)
if((percent >= lower) & (percent < higher)):
print('yes remove')
os.remove(filename)
break
path = 'C:\\Mypath\\*.jpg'
count(path)
但是,我觉得您的方法存在问题,因为您仅将 (0,0,0) 的像素计算为黑色像素。RGB 值的微小变化仍会显示为黑色,但不会被计算在内。例如 (0,0,1), (1,3,4) 等......都显示为黑色,但不会被您的代码计算在内。
推荐阅读
- javascript - 如何为多个握手域公开拍卖
- java - BeanCreationException:创建类路径资源中定义的名称为“configurationPropertiesBeans”的 bean 时出错
- algorithm - 根据年龄和性别将一组 n 人分成 m 个平衡的子组
- javascript - 如何使用 JavaScript 创建 HTML 电子邮件
- flutter - 处理方法调用失败;java.lang.IllegalArgumentException:给定字符串为空或为空
- sql - 当它们报告为空时如何替换/连接同一个表中的两个值?
- cupy - 分析时:什么是 API 调用:cupy 中的 cuLaunchKernel
- azure-web-app-service - 为 php web 应用程序创建 azure webapp
- javascript - React/Redux - 添加元素而不是替换状态
- python - 在多个条件下分配对象侧标签