网游活动专题站 - 新版本福利与赛事播报

  • 首页
  • 热门推荐
  • 版本速递
  • 赛事专区

最新发表

  • 《龙之女神:觉醒纪元·跨服巅峰之战庆典暨神龙圣域全服开启》
  • 叠入深渊:极限挑战生存大冒险
  • 冰汽时代:最后的家园——极寒之下,重建文明
  • 《逆转天下》天命逆旅·2025跨时空全服争霸庆典暨四周年纪念盛典
  • ABTest流量分发和业界的一些做法经验
  • 《饮食男女》2025年春季美食文化体验活动盛大开启
  • 《英雄与家园》2025盛夏庆典:跨服争霸赛暨周年限定福利大放送
  • 广告联盟哪个好,深度解析与选择指南
  • 新华字典:鼍
  • 巴塞隆納蒙特惠山的魔幻噴泉(新時刻表)

友情链接

Copyright © 2022 网游活动专题站 - 新版本福利与赛事播报 All Rights Reserved.

python+opencv图片模糊/过爆/过暗检测一条龙

版本速递 · 2025-10-20 05:52:46

目前bd到的基本都是c++版本,自己改了一个python的,阈值可以自己微调一下,有问题欢迎指出。

说明有空再写()

check.py主文件

from PIL import Image

import os

from os import listdir

from tools import calLaplacianVar,overExposeDetect

def check_image(img_path, fixedSize, stdTimes = 1):

#正常值区间

# distArea = []

# distArea.append(calAvg(img) - calStd(img)*stdTimes)

# distArea.append(calAvg(img) + calStd(img)*stdTimes)

status = "normal"

#当图片指标不在正常范围内,被判断为异常

value = calLaplacianVar(img_path, fixedSize)

if (value < 2200):

isOutlier = True

status = "vague"

print(str(img_path) + "该图指标值:" + str(value) + " status:" + status)

print(" 正常区间:[2200 , +)")

return isOutlier

else:

isOutlier = False

# print("该图指标值:" + str(value) + " status:" + status)

isOutlier = overExposeDetect(img_path, fixedSize)

return isOutlier

def main():

test_folder = r'E:\newproject\test'

#generate_folder = r'E:\newproject\generate'

files = listdir(test_folder)

for f in files:

# print("图片" + f +":")

check_image(os.path.join(test_folder, f), (448, 448))

if __name__ == '__main__':

main()

工具文件tools.py

import cv2

import os

import numpy as np

import math

'''

@illustrate:用拉普拉斯计算图片模糊程度

@param img 图片路径, size(tuple)resize大小

@return 模糊程度

'''

def calLaplacianVar(img, size):

grayImg = cv2.imread(img, 0)

grayImg = cv2.resize(grayImg, size)

sobelImg = cv2.Laplacian(grayImg, cv2.CV_64FC1)

#标准差

mu, sigma = cv2.meanStdDev(sobelImg)

sigmaValue = sigma[0][0]

#方差

variance = pow(sigmaValue, 2)

return variance

"""

@illustrate: 曝光检测

@param

"""

def overExposeDetect(img_path,size):

img = cv2.imread(img_path, 1)

img = cv2.resize(img, size)

thre = 0.175

status = "normal"

flag = False

if img.shape[2] != 1:

hsvSpaceImage = cv2.cvtColor(img, cv2.COLOR_RGB2HSV) # hsv转换

else:

hsvSpaceImage = img.clone()

hsvImageVChannels = hsvSpaceImage[:, :, 2]

step = 8 #以8*8小窗口遍历V通道图像

imageOverExposeBlockNum = 0

imageBlocks = 0

imageDarkBlockNum = 0

#遍历

i = 0

while i < hsvImageVChannels.shape[0]:

j = 0

while j < hsvImageVChannels.shape[1]:

imageBlock = hsvImageVChannels[i:i+step, j:j+step]

mea = np.mean(imageBlock)# 求小矩形的均值

if mea > 233.0:

imageOverExposeBlockNum += 1

elif mea < 53.0:

imageDarkBlockNum += 1

imageBlocks += 1

j += step

i += step

if imageDarkBlockNum/imageBlocks > thre:

status = "dark"

flag = True

if imageOverExposeBlockNum/imageBlocks > thre:

status = "overexposure"

flag = True

if flag == True:

print(str(img_path) + "该图曝光度:" + str(imageOverExposeBlockNum/imageBlocks * 100) + " status:" + status)

print(" 正常区间:(0," + str(thre*100) + "]")

return flag


手机怎么打包?三个方法随心选!
魔兽世界各版本随机团本排本NPC位置大全 排随机团本NPC位置全整理合集