opencv 查找图像是亮还是暗

qybjjes1  于 2022-11-15  发布在  其他
关注(0)|答案(4)|浏览(185)

我想知道如何在Python 3中使用OpenCV编写一个函数,它接受一个图像和一个阈值,并在严重模糊图像和降低质量后返回“dark”或“light”(越快越好)。这听起来可能有点模糊,但只要能工作就行了。

vddsk6oq

vddsk6oq1#

您可以尝试以下操作:

import imageio
import numpy as np

f = imageio.imread(filename, as_gray=True)

def img_estim(img, thrshld):
    is_light = np.mean(img) > thrshld
    return 'light' if is_light else 'dark'

print(img_estim(f, 127))
bsxbgnwa

bsxbgnwa2#

你可以试试看,因为image是灰度图像-

blur = cv2.blur(image, (5, 5))  # With kernel size depending upon image size
if cv2.mean(blur) > 127:  # The range for a pixel's value in grayscale is (0-255), 127 lies midway
    return 'light' # (127 - 255) denotes light image
else:
    return 'dark' # (0 - 127) denotes dark image

请参考这些-
Smoothing,平均值,阈值

hfsqlsce

hfsqlsce3#

就我个人而言,我不会为了这么简单的操作而编写任何Python,或者加载OpenCV。如果你一定要使用Python,请忽略这个答案,选择另一个。
您只需在终端的命令行中使用ImageMagick,即可获得图像的平均亮度(以百分比表示),其中100表示 “全白色”,0表示 “全黑”,如下所示:

convert someImage.jpg -format "%[fx:int(mean*100)]" info:

或者,您可以使用libvips,它不太常用,但非常快速且非常轻量级:

vips avg someImage.png

对于8位图像,vips的答案在0..255的范围内。
请注意,这两种方法都适用于许多图像类型,从PNG到GIF、JPEG和TIFF。

wh6knrhe

wh6knrhe4#

import numpy as np
import cv2

def algo_findDark(image):
    blur = cv2.blur(image, (5, 5))
    mean = np.mean(blur)
    if mean > 85:
        return 'light'
    else:
        return 'dark'

cam = cv2.VideoCapture(0)

while True:
    check, frame = cam.read()

    frame_gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    ans = algo_findDark(frame_gray)

    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(frame, ans, (10, 450), font, 3, (0, 0, 255), 2, cv2.LINE_AA)

    cv2.imshow('video', frame)

    key = cv2.waitKey(1)
    if key == 27:
        break

cam.release()
cv2.destroyAllWindows()

相关问题