macOS의 scikit-image에서 이미지 표시(pyenv/Python 3)
8551 단어 macospyenvscikit-imagematplotlib
scikit-image에서 이미지 표시를 시도하면 플러그인으로 matplotlib을 사용해야합니다.
macOS에서 pyenv로 설치한 Python 환경에서는 matplotlib 의 backend를 변경하지 않으면 오류가 나오고 움직이지 않으므로 해결 방법.
결론을 먼저 쓰면 matplotlib의 백엔드를
TkAgg
또는 Qt5Agg
로 한다(필요한 라이브러리는 인스톨 하는 전제).환경
scikit-image 설치 절차
애초에 어떻게 설치했는가 하면 아래의 순서.
$ pip install -U scikit-image
$ pip install scipy
$ pip install matplotlib
pip
는 pyenv
에서 설치한 Python 3.5.3의 것.하고 싶은 일
scikit-image 이라는 라이브러리의
io.show()
로 이미지를 표시하고 싶다.문제
아무것도 생각하지 않고
pip
로 scikit-image 패키지를 인스톨 하면 , 이하의 에러가 발생해 화상을 표시할 수 없다.io.show()
를 호출하여 이미지를 표시하고 싶지만 그 전에 io.imshow()
로 표시할 이미지를 할당해야 합니다.이 시점에서 RuntimeError.
>>> io.imshow(img)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/skimage/io/_io.py", line 156, in imshow
return call_plugin('imshow', arr, plugin=plugin, **plugin_args)
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 198, in call_plugin
raise RuntimeError(msg % kind)
RuntimeError: No suitable plugin registered for imshow.
You may load I/O plugins with the `skimage.io.use_plugin` command. A list of all available plugins are shown in the `skimage.io` docstring.
화면 표시에 이용 가능한 플러그인이 없다는 메시지와 같이, 우선 플러그인을 조사한다.
>>> io.find_available_plugins()
{'gdal': ['imread', 'imread_collection'], 'imread': ['imread', 'imsave', 'imread_collection'], 'simpleitk': ['imread', 'imsave', 'imread_collection'], 'test': ['imsave', 'imshow', 'imread', 'imread_collection', 'imshow_collection'], 'pil': ['imread', 'imsave', 'imread_collection'], 'matplotlib': ['imshow', 'imread', 'imshow_collection', 'imread_collection'], 'imageio': ['imread', 'imsave', 'imread_collection'], 'qt': ['imshow', 'imsave', 'imread', 'imread_collection'], 'gtk': ['imshow'], 'freeimage': ['imread', 'imsave', 'imread_collection'], 'tifffile': ['imread', 'imsave', 'imread_collection'], 'fits': ['imread', 'imread_collection']}
각 플러그인에 사용할 수 있는 기능은 플러그인 이름 뒤에 배열로 유지됩니다.
imshow
에 대응하고 있는 것은, test
를 들여다보면 matplotlib
와, qt
이 중 gtk
는 PyQt4를 요구한다.설치된 Matplotlib를 사용하려고 하면 다음 오류가 발생합니다.
>>> io.use_plugin('matplotlib')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 255, in use_plugin
_load(name)
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 299, in _load
fromlist=[modname])
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/skimage/io/_plugins/matplotlib_plugin.py", line 3, in <module>
import matplotlib.pyplot as plt
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/matplotlib/pyplot.py", line 115, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
globals(),locals(),[backend_name],0)
File "/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/matplotlib/backends/backend_macosx.py", line 19, in <module>
from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
라고 말해 matplotlib 측의 백엔드 설정의 문제로 이용할 수 없다. Python 자체를 framework 형식으로 설치하라고 하는 것 같지만 과연 귀찮다.
존재하는 플러그인이 아니라 실제로 유효한 플러그인을 조사한다.
>>> io.find_available_plugins(loaded=True)
{'pil': ['imread', 'imsave', 'imread_collection']}
qt
라는 플러그인 밖에 유효하지 않습니다.해결 방법
어떤 백엔드를 사용할 수 있도록 하면 된다. Qt4 자체가 서포트 끊어지므로 PyQt4는 그만둔다. Tk를 사용해도 좋지만, Qt5 쪽이 모던하고 좋은 것 같은 생각이 든다.
그래서 PyQt5을 설치하고 matplotlib를 통해 사용하기로 결정합니다.
우선 Qt5 본체를 설치.
$ brew install qt
이어 PyQt5.
$ pip install PyQt5
PyQt5-5.9가 설치됩니다. 의존관계에서 필요한 라이브러리도 마음대로 들어갈 것.
구성 파일 수정.
matplotlib의 설정 파일의 위치는 아래의 순서로 확인할 수 있다.
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
'/Users/atuyosi/.pyenv/versions/3.5.3/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc'
편집기로 위의 파일을 편집.
$ vi .pyenv/versions/3.5.3/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
백엔드를 지정하는 위치를 찾습니다.
backend : macosx
사용할 백엔드를 지정합니다.
backend : Qt5Agg
동작 확인
제대로 플러그인이 유효한지 확인한다.
>>> from skimage import io
>>> io.use_plugin('matplotlib')
>>> io.find_available_plugins(loaded=True)
{'matplotlib': ['imshow', 'imread', 'imshow_collection', 'imread_collection'], 'pil': ['imread', 'imsave', 'imread_collection']}
화상의 표시는 이하와 같이 한다.
>>> from skimage import io
>>> img = io.imread("test.jpg")
>>> io.imshow(img)
<matplotlib.image.AxesImage object at 0x110ba1160>
>>> io.show()
^C
pil
를 호출하지 않고 io.imshow()
를 호출해도 아무것도 표시되지 않으므로 주의.실제 표시는 다음과 같다.
scikit-image 라이브러리의
io.show()
모듈을 읽으면 테스트 이미지를 읽을 수 있으므로 이것을 사용한다.>>> from skimage import data
>>> io.imshow(data.camera())
<matplotlib.image.AxesImage object at 0x1138707b8>
>>> io.show()
플러그인의 순서에 따라서는 명시적으로
data
를 사용하도록 지정하면 된다.>>> io.use_plugin('matplotlib')
참고
Reference
이 문제에 관하여(macOS의 scikit-image에서 이미지 표시(pyenv/Python 3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/atuyosi/items/9dd9f637e3f53a41f010텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)