Можно ли изменить цветные области на черно-белые, если другие области остаются такими же? - PullRequest
0 голосов
/ 29 апреля 2020

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

Для объяснения на этом рисунке я sh заменил синие области на белые, а внутри текстов есть быть черным, не затрагивая области ниже.

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020
import cv2
import numpy as np

img = cv2.imread('A.jpg')
img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
w=img.shape[1]
m=np.mean(img, axis=1)
m=m>150
mask_img=np.repeat(m, w)
mask_img.shape=img.shape
a=255-img^(255*mask_img)
cv2.imwrite('A_out.jpg', a)

enter image description here

0 голосов
/ 29 апреля 2020

преобразовать его в массив значений rgb

rgbVals = getRGBValues(im) # no idea how to do this offhand
for row in range(20): # first 20 px
    for col,px in enumerate(rgbVals[row]):
        rgbVals[row][col] = (255,255,255) if rgbVals[row][col] != (255,255,255) else (0,0,0)
new_im = rgbVals_to_image(rgbVals)

здесь это точнее

>>> from scipy import misc
>>> a = misc.imread("D:\\Downloads\\pic.jpg") # the image from your post
>>> #get the white(ish) cells
... mask = (a[0:20,:,0] > 160) & (a[0:20,:,1] > 160) & (a[0:20,:,1] > 160)
>>> a[0:20][mask] = [0,0,0] # make the white cells black
>>> a[0:20][~mask] = [255,255,255] # make the rest white
>>> misc.imsave('out.jpg',a)

Вывод не идеален: / (все 0:20 означают, что мы просто смотрим на первые 20 строк пикселей) enter image description here

...