为啥 cv2.namedWindow 不起作用?

Posted

技术标签:

【中文标题】为啥 cv2.namedWindow 不起作用?【英文标题】:Why cv2.namedWindow is not works?为什么 cv2.namedWindow 不起作用? 【发布时间】:2021-12-22 00:25:38 【问题描述】:

我尝试启动我的代码,但过程使用方法 cv2.namedWindow 一步完成(没有 任何错误)。 你有什么建议,为什么会这样?

import cv2


image_cv2 = cv2.imread('/home/spartak/PycharmProjects/python_base/lesson_016/python_snippets/external_data/girl.jpg')


def viewImage(image, name_of_window):
    print('step_1')
    cv2.namedWindow(name_of_window, cv2.WINDOW_NORMAL)
    print('step_2')
    cv2.imshow(name_of_window, image)
    print('step_3')
    cv2.waitKey(0)
    print('step_4')
    cv2.destroyAllWindows()

cropped = image_cv2
viewImage(cropped, 'Cropped version')

附: 我还删除了 UBUNTU ,并安装了 Fedora。 取而代之的是 Pycharm,检查 VS 代码上的程序。 但什么都没有改变。 我将图片(girl.jpg)的位置更改为带有 python 文档的目录。 但是程序在 step1 停止并等待一些东西。

【问题讨论】:

您可能在调用cv2.imshow 时遇到分段错误错误 (SIGSEGV)。此路径是否存在:/home/spartak/PycharmProjects/python_base/lesson_016/python_snippets/external_data/girl.jpg? 请使用 Stack Overflow 编辑器工具 to upload images 而不是将它们托管在外部服务上。 实际上您的代码在我的环境中运行良好。您可以尝试在没有namedWindow 行的情况下运行它吗? @kiner_shah 是的,存在。我更改了 jpg 的位置,但没有任何变化。 !Valid Xhtml @YunusTemurlenk 在没有命名窗口的情况下尝试过。 Python 在第 2 步之后等待。 !Valid XHTML 【参考方案1】:

我发现了问题。 我在虚拟环境中启动了这段代码。 显然,在 UBUNTU/FEDORA 的虚拟环境中,opencv 是有限制的。

【讨论】:

【参考方案2】:

代码为我完成了所有 4 个步骤

我觉得你取的图片路径有问题

函数 cv2.namedWindow 创建一个可用作图像和轨迹栏占位符的窗口。创建的窗口由它们的名称引用如果同名的窗口已经存在,则该函数不执行任何操作。

【讨论】:

我尝试了绝对路径和文件名。使用 python 程序将此 jpg 的位置更改为目录。没有改变。此处屏幕:ibb.co/Lg9cZpT @SpartakBorisov 尝试将imread 仅提供girl.jpg 作为输入。 检查路径 ...../python_base/lesson_016/python_sn-ps/girl.jpg 你可以只给 girl.jpg 因为代码和图片在同一个目录中。 与图片路径和问题无关!!! @DNy 我只选择 'imread('girl.jpg')' ,但它不起作用。【参考方案3】:

我确实认为函数 cv2.destroyAllWindows 我猜这个函数正在释放一些需要的 gui 元素。 所以多次调用会产生一些麻烦。

import cv2

image_cv2 =  cv2.imread('foo.jpg')
def viewImage(image, name_of_window):
    print('step_1')
    cv2.namedWindow(name_of_window)
    print('step_2')
    cv2.imshow(name_of_window, image)
    print('step_3')
    cv2.waitKey(0)
    #print('step_4')
    #cv2.destroyAllWindows()
    

cropped = image_cv2
viewImage(cropped, 'Cropped version')
#e.g. better usage at the end of the code or section 
cv2.destroyAllWindows()

【讨论】:

我做到了,python 在 step2 之后停止并等待一些东西 您可以随意调用destroyAllWindows。它只会破坏所有窗口,不会阻止创建新窗口。

以上是关于为啥 cv2.namedWindow 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

谷歌 Colab 中的 Trackbars 和 cv2.namedWindow()

关于opencv的cv2.WINDOW_一类

opencv显示图像---固定格式(函数)

吴裕雄 实战PYTHON编程

为啥这种方法不起作用?

修改php.ini不起作用是为啥