成功安装完opencv后,使用时报错:Rebuild the library with Windows, GTK+ 2.x or Carbon support.
"""""
Loading weights from ./weights/yolov3.weights...Done!
data/dog.jpg: Predicted in 0.143663 seconds.
dog: 100%
car: 27%
truck: 92%
bicycle: 99%
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.2) /home/jupiter/opencv-3.4.2/modules/highgui/src/window.cpp:615:
error: (-2: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 function 'cvNamedWindow'
"""
如果opencv安装时,WITH_GTK=OFF -D WITH_GTK_2_X=OFF :
#cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 -D OPENCV_EXTRA_MODULES_PATH=/home/jupiter/opencv-3.4.2/opencv_contrib-3.4.2/modules -D WITH_GTK=OFF -D WITH_GTK_2_X=OFF ..
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 -D OPENCV_EXTRA_MODULES_PATH=/home/jupiter/opencv-3.4.2/opencv_contrib-3.4.2/modules -D WITH_GTK=OFF -D WITH_GTK_2_X=OFF ..
则重装opencv,修改 WITH_GTK=ON -D WITH_GTK_2_X=ON :
#cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 -D OPENCV_EXTRA_MODULES_PATH=/home/jupiter/opencv-3.4.2/opencv_contrib-3.4.2/modules -D WITH_GTK=ON -D WITH_GTK_2_X=ON ..
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 -D OPENCV_EXTRA_MODULES_PATH=/home/jupiter/opencv-3.4.2/opencv_contrib-3.4.2/modules -D WITH_GTK=ON -D WITH_GTK_2_X=ON ..
#cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 -D OPENCV_EXTRA_MODULES_PATH=/home/jupiter/opencv-3.4.2/opencv_contrib-3.4.2/modules -D WITH_GTK=ON -D WITH_GTK_2_X=ON ..
或者简单点:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 -D OPENCV_EXTRA_MODULES_PATH=/home/jupiter/opencv-3.4.2/opencv_contrib-3.4.2/modules ..
另外,在pencv安装前,要先安装一些依赖项目:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install ffmpeg #很重要,读视频,显示视频
注意:
自定义的路径:CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.2 ,后续会遇到一些小问题。
推荐,默认路径:CMAKE_INSTALL_PREFIX=/usr/local
@https://www.cnblogs.com/bitbyte/archive/2012/10/28/2744035.html
sudo apt-get install libgtk2.0-dev 安装libgtk2.0-dev不顺利的话,可以尝试aptitude的方法解决:
sudo aptitude install libgtk2.0-dev
sudo: aptitude:找不到命令
jupiter@jupiter-Default-string:~$ sudo apt-get install aptitude
网上给出的相关解释:
----------------------------------------------------------- 在网上搜索到有些解决办法是更改软件源(比如https://www.cnblogs.com/zeze/p/linux1.html),但是修改完后还是不行。 参考其他博客发现,libgtk2.0-dev依赖得部分库需要一个比较老的版本。所以,这里使用如下命令: sudo aptitude install libgtk2.0-dev 将较新的库降级为满足依赖关系的库,按照提示逐步操作即可。 运行后会出现一大堆消息,给出第一个解决方案一般是保留这些库文件,让选择y/n/q?,这里选择“n”;
然后会继续找解决方案,有时会超时找不到,点击y继续找,直到给出得解决方案是“降级”这些库文件,选择“y”,然后等待结束就完了。 完成后可以再输入“sudo aptitude install libgtk2.0-dev”进行测试,出现已经安装对应得库文件,说明安装成功了。(此方法同样适用于安装opencv时其他不能正常安装的预备库文件)
-----------------------------------------------------------
原因分析:
出现上述错误是因为目前使用的源的版本比较低,而要安装的软件的依赖的版本的较高,因此方法只能是更换源
这种问题就应该是软件源的问题,源中的版本比较低;依赖的版本号比正要安装的版本号要低导致没法安装。
只需要将原来软件源删除,用新的软件源替换一下就可以了。
sudo gedit /etc/apt/sources.list
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
写上软件源后,再刷新一下,注意一定要刷新,运行:
sudo apt-get update
尝试了不好使。内核还给顺便升级了,原来 4.15.0-29 升级成了4.15.0-88,导致驱动不好使了。
aptitude 会对依赖关系进行智能处理,aptitude 会重新计算可行方案,包括对已存在的包进行降级等。
pkg-config是一个用来管理包的程序,在控制台输入 pkg-config --cflags --libs gtk+-2.0,可以发现 输出的文本包括了gcc编译gtk+2.0所需要的所有选项(头文件目录和库文件)。
附:
aptitude 与 apt-get aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。
与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。
举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。 以下是笔者总结的一些常用 aptitude 命令,仅供参考。 命令作用 aptitude update 更新可用的包列表 aptitude upgrade 升级可用的包 aptitude dist-upgrade 将系统升级到新的发行版 aptitude install pkgname 安装包 aptitude remove pkgname 删除包 aptitude purge pkgname 删除包及其配置文件 aptitude search string 搜索包 aptitude show pkgname 显示包的详细信息 aptitude clean 删除下载的包文件 aptitude autoclean 仅删除过期的包文件 有的问题 apt-get 解决不了,必须使用 aptitude 解决,有的问题,用 aptitude 解决不了,必须使用apt-get. aptitude 解决得更好的地方: install, remove, reinstall(apt-get无此功能), show(apt-get无此功能), search(apt-get无此功能), hold(apt-get无此功能), unhold(apt-get无此功能), apt-get 解决得更好的地方: source(aptitude无此功能), build-dep (低版本的aptitude没有build-dep功能) apt-get 跟 aptitude 没什么区别的地方:update, upgrade (apt-get upgrade=aptitude safe-upgrade, apt-get dist-upgrade=aptitude full-upgrgade)
@https://www.cnblogs.com/klcf0220/p/10242810.html