为啥 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 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章