【问题标题】:Python OpenCV 3.2 imshow() no image content with waitKey(0)!Python OpenCV 3.2 imshow() 没有带有 waitKey(0) 的图像内容!
【发布时间】:2017-11-12 04:34:30
【问题描述】:

我从this installation guide 安装了 OpenCV3.2 + python3.6.1。 (对于我输入的指南中所需的路径:


编辑:我不确定,但我想我应该在 3.6 下安装 opencv,而不是 3.6.1,请不要使用我的路径进行安装!


/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/config-3.6m-darwin/libpython3.6.dylib

和

ls -d /usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/include/python3.6m/)

我的测试代码和the tutorial of OpenCV 3.2 documentation完全一样,但是输出屏幕只显示一个标题:

import numpy as np
import cv2

img = cv2.imread('1.jpg',0)
cv2.imshow('image', img)
cv2.waitKey(0)

结果:

如图所示,图片内容缺失。

而且好像和我的python有关系,图标坏了:

请帮帮我!我只是想在我的学校项目中使用 opencv...


【问题讨论】:

  • 图标与它没有任何关系,我的工作正常,图标仍然如此。前几天有人遇到了同样的问题。我找不到问题,但无论如何,当我看到它时没有答案。将其作为脚本运行而不是在解释器中运行时,您是否遇到同样的问题?如果cv2 可以正常导入(显然是这样),那么我认为这不是您的安装问题。
  • 非常感谢您的友好回复,首先非常感谢您。我很高兴知道您刚刚提供的信息。现在我只是删除它,并通过 Homebrew 用 python2.7 重新安装它。是的,两种方法我都试过了。 :)@AlexanderReynolds
  • 嗯,我用python 3.6.1 和opencv 3.2.0 安装了相同的教程。但可以肯定的是,在 2.7 中试一试,看看你的结果是什么。您是否测试过cv2.imwrite() 是否有效?
  • 不,我实际上是 OpenCV 的新手。我刚刚阅读了文档/教程并遵循了它。安装完成后我会尝试你的建议。 :) @AlexanderReynolds

标签: python opencv opencv3.2


【解决方案1】:

如果你只是遇到同样的问题,我可以解决你的问题。但在采取任何进一步的步骤之前,您应该先看看:

  1. 我会建议你先从你的 mac 删除 OpenCV 3.2。

    不知道如何删除?步骤如下:

    1. 如果您想详细了解以下命令的作用,请先阅读this answer,然后在终端中运行以下命令:

      $> sudo find / -name "*opencv*" -exec rm -i {} \;
      
    2. 请仔细阅读每条删除检查信息,否则您可能会删除一些文件名中包含“opencv”的文件,这些文件可能与 OpenCV 无关,但可能是您的个人文件。

    3. 您的 cv2.so 仍会在磁盘中的某个位置存在,请在终端中使用以下命令检查它的位置:

      $> ls -l /usr/local/lib/python3.6/site-packages/
      

      在我的情况下,我在.../python3.6/... 找到了 cv2.so,你应该在/usr/local/lib/python 按“tab”,然后查看每个 python 版本的site-packages 文件夹(也许你要重新安装 OpenCV,) 以搜索 cv2.so。如果找到了,请删除它。

  2. Install OpenCV3.2 with Homebrew for Python2.7 / 3.6。只需按照所有步骤操作,并记住 Homebrew 是您最好的朋友。

    编辑:该链接适用于 Python2.7 和 3.6。

【讨论】:

  • 如果他试图用现代版 Python 安装OpenCV,你为什么建议他用旧版Python 安装?您绝对可以在 Mac 上让 OpenCV 3.2.0 与 Python 3.6.1 一起使用。
  • 抱歉我的误导性言论。但实际上我提供的链接可以同时适用于 Python2.7 和 Python3.6,并且链接有一步一步的让读者为两者设置。 @亚历山大雷诺兹
  • 啊——你应该编辑链接文本,因为它链接到 2.7 和 3的教程。作为仅供参考,这是 OP 在第一名。
【解决方案2】:

我遇到了类似的问题,但从 C++ API 的角度来看。致谢mattmyne。

窗口自动调整大小不适用于使用可可的 macOS。找不到窗口的图像尺寸。此问题已通过删除 window_cocoa.mm 中的 IP64 特定合成得到修复,该合成导致 cvShowImage 中窗口的 contentView 图像属性为空引用(图像引用未链接到 _image)。

简而言之,OpenCV 尝试同时支持 32 位和 64 位 ObjC 编译器,但由于 Apple 不再支持 32 位,一些图像合成操作导致 64 位机器中的空引用。更多info

要解决此问题,请找到文件 window_cocoa.mm;如果从源代码构建,它将位于 opencv/modules/highgui/src。

改变这个

@implementation CVView
#if defined(__LP64__)
@synthesize image;
#else // 32-bit Obj-C does not have automatic synthesize
@synthesize image = _image;
#endif

到此

@implementation CVView
@synthesize image = _image;

对 CVWindow 和 CVSlider 实现执行相同的操作以适应视频。

重新编译 OpenCV 并测试您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 2016-06-12
    • 2017-09-26
    • 2011-03-15
    • 2017-12-04
    相关资源
    最近更新 更多