Проверьте, все ли пиксели изображения с OpenCV - PullRequest
2 голосов
/ 15 января 2020

Я работаю над сценарием с OpenCV (Python), чтобы разделить изображение на различные разделы, чтобы позже запустить OCR для каждого раздела. У меня есть скрипт, разбивающий исходное изображение на все нужные мне блоки, но он также поставляется с несколькими простыми белыми изображениями.

Мне интересно, есть ли способ проверить, содержит ли изображение только белые пиксели или нет с помощью OpenCV. Я очень новичок в этой библиотеке, поэтому любая информация по этому вопросу будет полезна.

Спасибо!

1 Ответ

3 голосов
/ 16 января 2020

Метод № 1: np.mean

Рассчитать среднее значение изображения. Если оно равно 255, то изображение состоит из всех белых пикселей.

if np.mean(image) == 255:
    print('All white')
else:
    print('Not all white')

Метод № 2: cv2.countNonZero

Вы можете использовать cv2.countNonZero для подсчета ненулевых (белых) элементов массива. Идея состоит в том, чтобы получить двоичное изображение, а затем проверить, равно ли количество белых пикселей области изображения. Если он совпадает, то все изображение состоит из всех белых пикселей. Вот минимальный пример:


Входное изображение # 1 (невидимо, так как фон белый):

enter image description here

Все белое

Входное изображение # 2

enter image description here

Не все белое

import cv2
import numpy as np

def all_white_pixels(image):
    '''Returns True if all white pixels or False if not all white'''
    H, W = image.shape[:2]
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

    pixels = cv2.countNonZero(thresh)
    return True if pixels == (H * W) else False

if __name__ == '__main__':
    image = cv2.imread('1.png')
    if all_white_pixels(image):
        print('All white')
    else:
        print('Not all white')
    cv2.imshow('image', image)
    cv2.waitKey()
...