【问题标题】:OpenCV GTK+2.x error - "Unspecified error (The function is not implemented...)"OpenCV GTK+2.x 错误 - “未指定错误(功能未实现...)”
【发布时间】:2015-04-30 19:31:18
【问题描述】:

我已经按照这些步骤安装了 OpenCV。在尝试编译一个示例后,我得到了这个错误:

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/nick/.Apps/opencv/modules/highgui/src/window.cpp, line 516
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/nick/.Apps/opencv/modules/highgui/src/window.cpp:516: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvNamedWindow

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(threadTest)

find_package( OpenCV REQUIRED )


set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pthread")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/home/nick/ClionProjects/threadTest")

set(SOURCE_FILES main.cpp)
add_executable(threadTest ${SOURCE_FILES})
target_link_libraries( threadTest ${OpenCV_LIBS} )

我该如何解决?

【问题讨论】:

  • 只是阅读错误信息?它指出: 该功能未实现。使用 [..] GTK+ 2.x [..] 支持重建库。如果你在 Ubuntu 或 Debian 上,安装 libgtk2.0-dev 和 pkg-config,然后重新运行 cmake 或配置脚本 如果你不是在使用 Ubuntu 或 Debian,试着弄清楚 GTK 2.0 开发者包是如何被调用并与 pkg-config 一起安装。
  • 我已经安装了 libgtk2.0-dev 但它没有帮助:(
  • CMke 找到了吗?看看输出。也许您必须将 Gtk 的路径指向 CMake。

标签: c++ opencv cmake makefile


【解决方案1】:

首先检查libgtk2.0-dev是否安装正确。如果你已经安装了aptitude 包管理器,运行以下命令:

sudo aptitude search libgtk2.0-dev

它应该像这样返回:

i  libgtk2.0-dev              - development files for the GTK+ library
p  libgtk2.0-dev:i386         - development files for the GTK+ library

您需要再次构建文件。找到您的 OpenCV 文件夹。创建一个新文件夹并将其命名为 Release。进入这个文件夹。例如,

cd /home/user_name/OpenCv
mkdir Release
cd Release

现在通过以下命令使用 CMake 构建:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..

记得在 CMake 期间输入WITH_GTK=ON。

这一步之后,输入命令,

make
sudo make install

这应该可以解决您的问题。如果您破坏了 libgtk2.0-dev 的依赖项,请使用 aptitude 安装新的 libgtk2.0-dev 副本。

sudo aptitude install libgtk2.0-dev

【讨论】:

  • 谢谢。基本上,为了解决这个问题,我不得不用 GTK 重新编译和安装 OpenCV,WITH_GTK=ON。
  • 在 2017 年不起作用。即使完成所有这些步骤后,我仍然收到 gtk 错误并且无法执行 cv2.imshow。
  • @Thomio 你用来解决问题的命令行是什么?
  • 如果只是 GTK 的问题。我需要用openGL编译吗??
【解决方案2】:

如果您使用 opencv-python pip 包安装 OpenCV,请注意以下注释,取自 opencv-python:

重要提示
macOS 和 Linux 轮子目前有一些限制:

  • 不支持视频相关功能(未使用 FFmpeg 编译)
  • 例如 cv2.imshow() 将不起作用(未使用 GTK+ 2.x 或 Carbon 支持编译)

还要注意,要从其他来源安装,首先必须删除 opencv-python 包。

为了在 Ubuntu 中安装 OpenCV,我遵循了这个指南,它工作得非常好:Ubuntu 16.04: How to install OpenCV

【讨论】:

    【解决方案3】:

    为了改进Nic Szer's answer,我想通过三个简单的步骤来解释如何在macOS上修复这个错误。

    1. 删除已安装的 OpenCV 版本以避免以后搞砸

      pip3 uninstall opencv-python
      
    2. 将您的 Python 版本降低到 3.5(当前版本 3.6 与 Conda 存在问题,我们将使用它来安装 OpenCV)

      conda install python=3.5
      
    3. 最后,使用 Conda 安装 OpenCV 的工作版本

      conda install -c menpo opencv3
      

    然后瞧:OpenCV 将开始在您的 macOS 上工作 (macOS v10.12.4 (Sierra))。

    【讨论】:

    • 是的,您也可以只编辑我的答案,而不是自私地寻求积分。
    【解决方案4】:

    如果前面的答案中提到的不起作用,请尝试:

    pip install opencv-python
    

    对于 Python 2,或

    pip3 install opencv-python
    

    适用于 Python 3。

    【讨论】:

      【解决方案5】:

      对我来说(Arch Linux、Anaconda 和 Python 3.6),从建议的频道 menpo 或 loopbio 安装并没有改变任何东西。我的解决方案是

      1. 安装 pkg-config (sudo pacman -Syu pkg-config),
      2. 从环境中移除 opencv (conda remove opencv) 和
      3. 从 conda-forge 频道重新安装 opencv (conda install -c conda-forge opencv)

      conda list 现在返回 opencv 3.3.0 py36_blas_openblas_203 [blas_openblas] conda-forge,并且所有使用 cv2 启动的窗口都可以正常工作。

      【讨论】:

        【解决方案6】:

        对于 Windows,只需卸载 OpenCV 包:

        pip uninstall opencv-python
        

        然后重新安装:

        pip install opencv-python
        

        【讨论】:

        • 本来要写这个的:)
        【解决方案7】:

        我已经解决了使用Anaconda 3 安装在Ubuntu 16.04 (Xenial Xerus) 上的问题。

        我的 Python 代码使用了PyCharm 编辑器。

        我使用的是 Python 3.6 版本。

        我使用这些过程解决了这个问题。

        IDEA:我们需要从 PyCharm 安装包 opencv-contrib-python 包。

        【讨论】:

          【解决方案8】:

          我有 Ubuntu 16.04 LTS (Xenial Xerus) 环境,预装了 GTK 3。

          Caffe build (master 分支) 遇到了同样的错误, 尝试以下步骤,也许它应该适合你。

          sudo apt-get install libgtk-3-dev
          cmake .. (WITH_GTK=ON and other settings),
          make
          

          宾果游戏,错误消失了……在我的 Python Caffe 代码中

          请注意:

          CMake 配置应该反映 GTK+ 3.x 而不是 GTK+ 2.x:

                 GUI:
          --     QT:                          NO
          --     GTK+ 3.x:                    YES (ver 3.18.9)
          --     GThread :                    YES (ver 2.48.2)
          --     GtkGlExt:                    NO
          --     OpenGL support:              NO
          --     VTK support:                 NO
          

          【讨论】:

          【解决方案9】:

          我遇到了同样的问题,并通过简单的reinstalling opencv 解决了它。

          无需先卸载。

          【讨论】:

            【解决方案10】:

            我尝试了几个之前的答案,在以下步骤中提到了在 ubuntu 中对我有用的答案:

            1. 首先,通过在终端conda remove opencv 中键入以下命令来删除当前安装在系统中的opencv 包。
            2. 如果您的 Python 版本是 3.6 或更高版本,请将其更改为稳定版本,可以通过输入 conda install python=3.5 来完成。
            3. 稍后,通过在终端conda install -c menpo opencv3 中输入以下内容再次安装 opencv 包

            【讨论】:

              【解决方案11】:

              我不得不多次处理这个问题,这是迄今为止一直有效的:

              conda remove opencv
              conda install -c menpo opencv
              pip install --upgrade pip
              pip install opencv-contrib-python
              

              【讨论】:

                【解决方案12】:

                在 Ubuntu 上使用 vcpkg 安装 OpenCV 后,vcpkg 存在一个已知问题,您最终会收到与本文顶部完全相同的错误消息,并且无法访问 highgui:

                OpenCV(4.3.0) 错误:未指定错误(该功能未实现。使用 Windows、GTK+ 2.x 或 Cocoa 支持重建库。
                如果您在 Ubuntu 或 Debian 上,请安装 libgtk2.0-dev 和 pkg-config,然后在 cvNamedWindow 中重新运行 cmake 或配置脚本,
                文件 .../vcpkg/buildtrees/opencv4/src/4.3.0-0c6047baf6.clean/modules/highgui/src/window.cpp,第 634 行
                捕获异常:OpenCV(4.3.0) .../vcpkg/buildtrees/opencv4/src/4.3.0-0c6047baf6.clean/modules/highgui/src/window.cpp:634:
                错误:(-2:未指定的错误)该功能未实现。使用 Windows、GTK+ 2.x 或 Cocoa 支持重建库。

                如果您在 Ubuntu 或 Debian 上,请安装 libgtk2.0-dev 和 pkg-config,然后重新运行 cmake 或在函数 'cvNamedWindow' 中配置脚本

                问题是在构建 OpenCV 时 vcpkg 传入了构建选项 -DWITH_GTK=OFF。未解决的问题:https://github.com/microsoft/vcpkg/issues/12621

                解决方法如下:

                • 编辑文件vcpkg/ports/opencv4/portfile.cmake
                • 找到写着-DWITH_GTK=OFF的那一行,把它改成-DWITH_GTK=ON
                • 运行./vcpkg remove opencv4
                • 运行sudo apt-get install libgtk2.0-dev pkg-config
                • 使用 ./vcpkg install opencv4 或您使用的任何 vcpkg 命令重新安装 OpenCV

                【讨论】:

                  【解决方案13】:

                  我遇到了同样的问题,卸载 opencv-python 并重新安装后已解决。

                  pip uninstall opencv-python
                  pip install opencv-python
                  

                  【讨论】:

                    【解决方案14】:

                    安装 opencv-contrib-python 后我的问题解决了:

                    pip install opencv-contrib-python
                    

                    【讨论】:

                      【解决方案15】:

                      试试这个。它对我有用

                      sudo apt-get install cmake cmake-curses-gui libgtk2.0-dev
                      

                      【讨论】:

                        【解决方案16】:
                        pip install opencv-contrib-python
                        

                        使用上述命令重新安装和安装解决了我的问题,但在关闭所有 pyhton 和 anaconda 实例之后,因为显然我的系统中保留了该库的缓存版本。

                        因此,卸载 opencv(尝试使用 pip 和 conda),关闭 IDE 并重新启动它,检查是否可以导入 opencv。如果仍然可以导入,请尝试运行代码:

                        help(cv2)
                        

                        并检查文件的存储位置并删除该文件夹。 重复该过程,直到您确定它已被卸载,以便您可以重新安装 opencv 完整包(选项 2 - 请参阅 https://pypi.org/project/opencv-python/)

                        【讨论】:

                          【解决方案17】:

                          我已经通过替换解决了这个问题

                          cvDestroyWindow("showImage");
                          

                          通过

                          cvDestroyWindow("ShowImage");
                          

                          【讨论】:

                            猜你喜欢
                            • 2021-07-11
                            • 1970-01-01
                            • 2020-08-27
                            • 2022-08-16
                            • 1970-01-01
                            • 2013-01-17
                            • 2020-12-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多