Я хочу сделать следующий цикл по изображению, чтобы удалить или изменить пиксель, если он равен значению rgb с порогом.
Цель состоит в том, чтобы удалить фон изображения и передать изображение в OCR..
Я пробовал 2 разных способа сделать это.
Метод 1:
По сути, я получаю среднее значение пикселя фона.А затем обведите все пиксели и проверьте, какие из них равны среднему фоновому пикселю.
for x in range(0, w):
for y in range(0, h):
if Pixel(img[y, x]).compare(pixel, threshold):
img[y, x] = 255
else
img[y, x] = 0
Функция сравнения проверит,>> / <= пиксель - / + пороговое значение.затем, если он вернет true, он изменит пиксель с белого на другой, а затем на черный. </p>
Это работает хорошо, однако это слишком медленно при использовании больших изображений.
Метод 2: Просто используйте opencvметод удаления фона.
Просто:
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 41, 2)
Результаты: Подача нормального изображения: ![enter image description here](https://i.stack.imgur.com/DWHDL.jpg)
метод результата 1: ![enter image description here](https://i.stack.imgur.com/NaCC6.png)
метод результата 2: ![enter image description here](https://i.stack.imgur.com/H5hyH.png)
Подача инвертированного изображения: ![enter image description here](https://i.stack.imgur.com/s9A9c.jpg)
метод результата 1: ![enter image description here](https://i.stack.imgur.com/gbkoW.png)
метод результата 2: ![enter image description here](https://i.stack.imgur.com/ywYgH.png)
Первый метод - способ замедления, а второй - методработает только тогда, когда изображение имеет беловатый фон.
Мне это нужно для разных цветов фона.
Я нашел кое-что о векторизации массива numpy.Но не смог найти хороший пример по этому поводу.