我需要在docker中运行opencv + python。
此代码应显示带有图像的 GUI 弹出窗口:
import cv2
from matplotlib import pyplot as plt
img = cv2.imread("image.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(1, 1, 1)
plt.imshow(img_rgb)
plt.show()
它在 ubuntu 桌面上工作正常,但问题出在 docker 上。我收到此错误:
UserWarning: Matplotlib is currently using agg,
which is a non-GUI backend, so cannot show the figure.
plt.show()
在一些帖子之后,如果我添加这个
import matplotlib
matplotlib.use('TkAgg')
我又遇到了类似的错误:
ImportError: Cannot load backend 'TkAgg' which
requires the 'tk' interactive framework, as
'headless' is currently running
我知道运行 GUI 应用程序不是 docker 的目标,但我想在使用 python 进行开发时使用 docker 来清理我的操作系统。
如果我通过 plt.savefig("mygraph.png") 更改 show() ,则会创建图像而不是 gui 弹出窗口。
docker run -it \
--workdir=/app \
-v /your/workspace:/app \
-v /tmp/.X11-unix/X0:$XSOCK -e DISPLAY=0 \
jjanzic/docker-python3-opencv bash
pip install matplotlib
首先,您需要在主机终端中运行此命令
xhost +local:root
然后,在运行 docker 时尝试添加这 2 个参数
-v "$HOME/.Xauthority:/root/.Xauthority:rw" \
-v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \