Измените значения цвета изображения для l oop, используя python - PullRequest
2 голосов
/ 22 января 2020

Рис.1 Полигон с черным фоном

Polygon with black background

Рис.2 желаемый вывод

without for-loop

Рис.3 Ввод

enter image description here

Есть несколько изображений с черным фоном и белым многоугольником внутри (рис.1), так как некоторые линии многоугольника не являются прямыми, значения цветов в некоторых пикселях не равны 0 или 255. Я попытался изменить значения цвета на 0 для внешней стороны многоугольника и 255 для внутренней. Этот код отлично работает для одного изображения, чтобы изменить цвета (рис.2), но когда я помещаю его в l oop для всех изображений (1024), он не меняет некоторые значения (рис. 3), например, см. Пиксель (137,588 ) на рисунках 1 и 2.

from skimage import io
import matplotlib.pyplot as plt
import scipy.io as spio
import numpy as np

pixels = 600
my_dpi = 100
num_geo=1024
## Load coordinates

mat = spio.loadmat('coordinateXY.mat', squeeze_me=True)
coord = mat['coordxy']*10

for i in range(num_geo):
    geo = coord[:, :, i]
    print(coord[:, :, i])
    fig = plt.figure(num_geo,figsize=( pixels/my_dpi,  pixels/my_dpi),facecolor='k', dpi=my_dpi)  
    plt.axes([0,0,1,1])
    rectangle = plt.Rectangle((-300, -300), 600, 600, fc='k')
    plt.gca().add_patch(rectangle)
    polygon = plt.Polygon(coord[:, :, i],color='w')
    plt.gca().add_patch(polygon)
    plt.axis('off')
    plt.axis([-300,300,-300,300])
    plt.savefig('figure/%d.jpg' % i, dpi=my_dpi)

    # Save as numpy file
    img_mat = io.imread('figure/%d.jpg' % i)
    np.save('img_mat.npy', img_mat)
    data = np.load('img_mat.npy')

    # # adjust the colors and save the revised version
    data1 = np.where(data<180, 0, data)
    data2 = np.where(data1>185, 255, data1)
    arr=data2
    plt.imsave('figureRev/%d.jpg' % i,arr)
    plt.close()

1 Ответ

1 голос
/ 22 января 2020

О, теперь я вижу!

Это либо потому, что вы использовали JPEG с lossy и позволили изменить ваши данные - в этом случае попробуйте формат PNG с lossless .

Или это потому, что диагональная линия была нарисована с помощью «сглаживания» ссылка на Википедию , которую вы можете отключить, если не хотите Это. В качестве альтернативы, вы можете портировать ваши данные, скажем, 127, чтобы гарантировать, что все значения ниже и равны станут нулями, а все значения выше станут 255.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...