wxImage Scale () вызывает искажение изображения

#python #image #wxpython #scipy #wxwidgets

#python #изображение #wxpython #scipy #wxwidgets

Вопрос:

Я пытаюсь увеличить изображение, в основном обрезая размеры исходного изображения на основе значения масштабирования. Мое изображение представляет собой массив RGBA numpy. Чтобы отобразить его в wxPython, я преобразовываю его в wxImage, а затем использую Scale() функцию для отображения его в правильном размере StaticBitmap. Проблема в том, что в определенных областях (в основном возле нижнего левого и верхнего правого углов) мое изображение выглядит так (при определенных значениях масштабирования):

введите описание изображения здесь

В то время как галочка прямо перед ним (меньший масштаб) выглядит следующим образом:

введите описание изображения здесь

Если использовать scipy.misc.imresize() в массиве numpy, а затем преобразовать его в wxImage для отображения, проблема исчезнет. Причина, по которой я бы предпочел не делать этого таким образом, — это скорость. Это намного медленнее, поэтому масштабирование кажется гораздо менее плавным. Я совершенно уверен, что это как-то связано с Scale() функцией, хотя я не уверен, в чем проблема. Есть идеи?

Комментарии:

1. Вы пробовали FloatCanvas? Он имеет встроенное масштабирование и может лучше поддерживать эту функциональность

2. @MikeDriscoll Я только что изучил это. К сожалению, после просмотра некоторых примеров и просмотра части кода я не думаю, что это будет очень полезно. Способ масштабирования теперь позволяет увеличивать масштаб с меньшими приращениями, а навигация намного быстрее (используется ползунок или колесико мыши). Мне также нужно иметь возможность поворачивать, и я не знаю, сколько времени потребуется, чтобы интегрировать это. Знаете ли вы, возможно ли просто использовать часть холста и иметь собственную навигацию, которая могла бы взаимодействовать с функцией масштабирования? Кроме того, может ли он отображать изображения с плавающей запятой в формате 2-D (или изображения RGB, которые я могу преобразовать)?

3. Я не уверен, хотя я думал, что он может поворачивать изображения и использует NumPy, поэтому я подумал, что это будет довольно быстро. Вы должны отправить свой вопрос в группу wxPython Google. У них могут быть хорошие идеи.

Ответ №1:

Если вы заботитесь о качестве результата (т. Е. Если вы просто не хотите создавать небольшие эскизы как можно быстрее), вам следует использовать wxImage::Scale() with wxIMAGE_QUALITY_HIGH вместо wxIMAGE_QUALITY_NORMAL качества по умолчанию.

Если это не устраняет проблемы, которые вы видите, было бы интересно посмотреть изображения, воспроизводящие проблему (пожалуйста, создайте заявку на wxTrac и загрузите их туда).

Комментарии:

1. Спасибо за ваше предложение, но я уже пробовал это и получил те же результаты. Я попытался открыть заявку, но мне нужно зарегистрироваться, и когда я пытаюсь зарегистрироваться, я получаю эту ошибку: «URLError: (-2, ‘Имя или служба неизвестны'»