【问题标题】:OpenCV imshow not respondingOpenCV imshow 没有响应
【发布时间】:2021-03-30 20:34:21
【问题描述】:

我有下面的小 test.py 代码

import cv2

image = cv2.imread("sample.png")
print(image) #not None

cv2.imshow("Photo", image)

cv2.waitKey()
cv2.destroyAllWindows()

我在安装了 opencv 的 Pycharm 上运行虚拟环境。 Python版本是3.8.6

但是,当我在 Pycharm 终端中运行 python test.pypython3 test.py 时,Python 启动器会弹出,但它只是没有响应并显示任何照片。

这是Photo显示的内容

有人遇到过同样的问题吗?

更新:我认为这是使用 Pycharm 的,我在 Anadconda 上再次尝试使用 Spyder,它工作正常。窗口出现。

【问题讨论】:

    标签: opencv pycharm operating-system spyder python-3.8


    【解决方案1】:

    如果您查看documentationwaitKey 会等待按下的键。

    但是,您没有在 waitKey 中指定任何延迟。

    delay 延迟以毫秒为单位。 0 是表示“永远”的特殊值。

    因此,如果您指定waitKey(0),图像将永远显示(直到您按下按钮。)

    代码:


    import cv2
    
    image = cv2.imread("sample.png")
    print(image) #not None
    
    cv2.imshow("Photo", image)
    
    cv2.waitKey(0)  # delay 0
    cv2.destroyAllWindows()
    

    【讨论】:

    • 谢谢Ahx,我也试过了,但觉得不行。
    • 你试过不同的参数吗?不是 0?
    • 如果在 imshow 之后 if 没有打印(参见下面的讨论),它似乎没有到达 waitKey。我确实用 Pycharm 社区版运行了这个程序,没问题。 cv2.waitKey() 的作用类似于 (0),它只是等到按下,但是提出问题时,图像根本没有出现?我怀疑 Highgui 库可能缺少依赖项或其他东西。
    【解决方案2】:

    编辑:我怀疑 Highgui 模块的依赖项丢失或损坏 - GTK、QT;甚至不是在他们的支持下构建的 OpenCV?

    你能包括一行吗:

    print(cv2.getBuildInformation())

    在您的代码中查看输出的 GUI 部分?

    对于 Windows,它是:

    GUI: 
        Win32 UI:                    YES
        OpenGL support:              YES (opengl32 glu32)
        VTK support:                 NO
    

    请参阅下面的 cmets 和链接:https://docs.opencv.org/master/db/d05/tutorial_config_reference.html

    ...

    你说它不是无,但你是否尝试过使用照片的绝对路径,它是否在 PyCharm 搜索的同一文件夹中?

    当您在映像目录中时,您是否尝试从系统控制台 shell 运行它?

    编辑:另外,如果它似乎加载了图像,但没有显示它,请尝试保存它:cv2.imwrite("save.png", image)

    另外,如果你在 cv2.imshow() 之后添加 print() 是否会显示输出?

    顺便说一句,另一个可能的问题来源可能是在创建新项目时设置虚拟环境等:

    【讨论】:

    • 您是否尝试过使用照片的绝对路径,它是否在 PyCharm 搜索的同一文件夹中?是的,我做到了。当您位于映像目录中时,您是否尝试从系统控制台 shell 运行它?是的,我也这样做了,但同样的问题仍然存在。如果它似乎加载了图像,但没有显示它,请尝试保存它: cv2.imwrite("save.png", image) -> 是的,它已将图像保存到新图像中。如果在 cv2.imshow() 之后添加 print() 会显示输出吗? -> 不,它不会打印。看起来程序在尝试启动 python 启动器时挂起,但没有响应。
    • 如果在 imshow 之后没有打印,那么可能是 cv2.imshow 挂起,这让我怀疑 HighGui 库,可能缺少某些依赖项?吗? OpenCV 在构建过程中有很多选择。您是否尝试过其他示例程序,它们只是省略了 imshow/GUI 并保存了输出?例如。 image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) sobelX = cv2.Sobel(image, cv2.CV_64F, 1, 0) sobelY = cv2.Sobel(image, cv2.CV_64F, 0, 1) sobelX = np.uint8( np.absolute(sobelX)) sobelY = np.uint8(np.absolute(sobelY)) sobelCombined = cv2.bitwise_or(sobelX, sobelY) cv2.line(image, (0,0), (40,40), 255, 3)
    • Highgui 可以基于 GTK(默认为 ON)或 Qt,取决于编译期间的选项:docs.opencv.org/master/db/d05/tutorial_config_reference.html"GUI 后端(highgui 模块)OpenCV 依赖于各种 GUI 库来绘制窗口。选项默认平台说明 WITH_GTK ON Linux GTK 是 Linux 和 Unix-like OS-es 中的常用工具包。默认情况下,如果找到将使用版本 3,可以使用 WITH_GTK_2_X 选项强制版本 2。 WITH_QT OFF 跨平台 Qt 是一个交叉-平台 GUI 框架。"
    • 顺便说一句,“Python 启动器”是什么意思? Python 可执行文件?如果图像已成功读取和保存等,则 Python 解释器已启动并运行。我认为“无响应”是 GUI 问题的典型表现。
    • 啊,现在你说 HighGui,我会开始研究它。谢谢!
    猜你喜欢
    • 2023-01-05
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2014-05-06
    • 1970-01-01
    • 2018-02-14
    • 2017-11-12
    相关资源
    最近更新 更多