@JRBRO

Как сделать такой анализатор освещенности в OpenCV?

Такой вопрос.

Есть скрипт, анализирующий общую яркость изображения
1

import numpy as np
import cv2
import sys
from collections import namedtuple

    #brange brightness range
    #bval brightness value
BLevel = namedtuple("BLevel", ['brange', 'bval'])

    #all possible levels
_blevels = [
    BLevel(brange=range(0, 24), bval=0),
    BLevel(brange=range(23, 47), bval=1),
    BLevel(brange=range(46, 70), bval=2),
    BLevel(brange=range(69, 93), bval=3),
    BLevel(brange=range(92, 116), bval=4),
    BLevel(brange=range(115, 140), bval=5),
    BLevel(brange=range(139, 163), bval=6),
    BLevel(brange=range(162, 186), bval=7),
    BLevel(brange=range(185, 209), bval=8),
    BLevel(brange=range(208, 232), bval=9),
    BLevel(brange=range(231, 256), bval=10),
]


def detect_level(h_val):
    h_val = int(h_val)
    for blevel in _blevels:
        if h_val in blevel.brange:
            return blevel.bval
    raise ValueError("Brightness Level Out of Range")


def get_img_avg_brightness():
    if len(sys.argv) < 2:
        print("USAGE: python3.7 brightness.py <image_path>")
        sys.exit(1)
    img = cv2.imread(sys.argv[1])
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    _, _, v = cv2.split(hsv)

    return int(np.average(v.flatten()))

if __name__ == '__main__':
    print("the image brightness level is: {0}".format(detect_level(get_img_avg_brightness())))


Есть так же решение, которое может составить одну картинку с результатами по секторам. Я разбиваю изображение на 128 и он оценивает каждое из них.

Screenshot-2022-08-09-at-17-36-23.png

Но можно ли сделать это как-то по пикселям, из серии каждый 10*10, чтобы не резать/анализировать/собирать обратно это изображение состоящие из 100 разных. Тоесть было бы хорошо такой-же output, но чтобы это небыло так завернуто

P.S. в примере неверные результаты, я об этом знаю, просто был такой скриншот готовый
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы