Интерактивная подборка цветов из двух изображений - блокнот Jupyter - PullRequest
0 голосов
/ 01 марта 2020

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

%matplotlib notebook

import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import imread


coords = []
coords_2 = []

class LineBuilder:
    def __init__(self, line):
        self.line = line
        self.xs = list(line.get_xdata())
        self.ys = list(line.get_ydata())
        self.cid = line.figure.canvas.mpl_connect('button_press_event', self)

    def __call__(self, event):
        print('click', event)
        if event.inaxes!=self.line.axes: return
        self.xs.append(event.xdata)
        self.ys.append(event.ydata)
        global coords
        global coords_2
        if event.inaxes == ax:
            coords.append((event.xdata, event.ydata))
        if event.inaxes == ax2:
            coords_2.append((event.xdata, event.ydata))    
        self.line.set_data(self.xs, self.ys)
        self.line.figure.canvas.draw()
        return coords


img = imread('test_img.jpg')

fig = plt.figure()
ax = fig.add_subplot(211)
ax.set_title('click to build line segments')
line, = ax.plot([0], [0])  # empty line
linebuilder = LineBuilder(line)

ax2 = fig.add_subplot(212)
ax2.set_title('click to build line segments')
line2, = ax2.plot([0], [0])  # empty line
linebuilder = LineBuilder(line2)

plt.show()

Он дает мне координаты на каждом изображении, на котором я щелкнул. Если у меня есть эти, у меня, конечно, есть также значения цвета. Также он визуализирует точки, на которые я нажал, соединяя их линиями.

Теперь мои два вопроса:

1) Я использовал пример из Matplotlib, который строит линии между точками. Однако я бы предпочел рассеянные точки, а не соединенную линию. Также было несколько примеров, но записные книжки, которые я скачал с веб-сайта Matplotlib, не работали.

Решено: 2) До сих пор я делал только простые вещи с Matplotlib, так что это в основном вопрос для начинающих , но я не нашел решения через гугл. Я не знаю, как разместить фактические изображения (из которых я хочу выбрать цвета) за точками, которые я создаю с помощью курсора на вспомогательных участках. Я знаю только, как я делаю это в одном сюжете

Буду рад любой помощи. Если есть, возможно, даже более простое решение, чем использование Matplotlib, это тоже будет здорово.

Спасибо!

Редактировать: Теперь я лучше понимаю, как работают объекты "топор". Таким образом, решение было очень простым:

fig = plt.figure()
ax = fig.add_subplot(211)
ax.set_title('click to build line segments')
ax.imshow(img)
line, = ax.plot([0], [0])  # empty line
linebuilder = LineBuilder(line)

Единственная проблема, которая осталась сейчас, - это как разбрасывать точки, а не строить линии.

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