opencv踩坑记录
1.安装python2环境下opencv2.4.9安装不成功的解决方法
2.查看linux下的各种安装库的安装位置和版本,以opencv为例
3.cmake与g++: opencv之在Linux下编译 opencv 程序的两种方式
5.python3中无法import cv2,importError
1.安装python2环境下opencv2.4.9安装不成功的解决方法
由于之前安装过opencv3.xx版本,在安装python2环境下opencv2.4.9时候会出错,安装不成功。
解决方法:
进入python2,然后:
import cv2
cv2.__version__
cv2.__file__ ##查看CV2模块的路径
cv2.__file__
查看CV2模块的路径,会得到类似于"/usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so"的文件,
把该.so文件删除之后,再使用Ubuntu默认仓库中的OpenCV来安装:sudo apt-get install python-opencv
,就会自动安装2.4.9版本的opencv(由于Ubuntu默认仓库版本旧,不支持Python3,所以安装的是2.4.9而不是opencv3.x.x)。
并且只影响python2环境下的cv2版本,python2环境下的opencv版本变为了2.4.9,python3环境下的opencv版本依然是3.4.0。
2.查看linux下的各种安装库的安装位置和版本,以opencv为例
参考:https://blog.csdn.net/zhenguo26/article/details/79627232
pkg-config 是一个查询 通过源码编译安装 的第三方库的工具。
查看linux下的opencv安装库:
pkg-config opencv --libs
查看linux下的opencv安装版本,也可以用来查看别的库的版本,不限于opencv:
pkg-config opencv --modversion
或者
pkg-config --modversion opencv
查看linux下的opencv安装路径:
sudo find / -iname "*opencv*"
在全盘上不区分大小写,搜索带有关键字opencv的所有文件及文件夹都会输出到终端,如果输出太长建议输出到txt文件里查看,如下:
sudo find / -iname "*opencv*" > /home/ubuntu/Desktop/opencv_find.txt
3.cmake与g++: opencv之在Linux下编译opencv程序的两种方式
参考:https://blog.csdn.net/keith_bb/article/details/52864851
// test.cc
#include <iostream>
#include <opencv2/opencv.hpp> //无论opencv2还是opencv3,他们的头文件都是这样包含
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("lena.jpg");
imshow("源图像",srcImage);
waitKey(0);
return 0;
}
(1)g++编译
g++ test.cc -o test ##### 如果源码不包含第三方库,这句话会生成一个可执行文件./test,但是由于头文件使用了第三方库opencv库,因此执行这句话会出错;
其中test.cc
是要编译的文件名称,生成的可执行文件取名为test,如果编译多个cpp或cc文件,可用如下方法:
比如在test.cc
代码中使用到了(在hello.h
声明)在hello.cc
中实现的函数,(test.cc
中也包含了hello.h
头文件),那么可以这么编译:
g++ hello.cc test.cc -o test
上面这句话会生成一个可执行文件./test,但是由于头文件使用了第三方库opencv库,所以直接这么编译会出错,需要使用
g++ `pkg-config opencv --cflags` test.cc -o test `pkg-config opencv --libs` //一定要严格遵照这样的顺序写
然后就可以使用 ./test
来运行程序了。对于需要输入命令行参数的,其形式类似与 ./test arg1 arg2
(2)使用cmake编译OpenCV文件
可以参考下面这两个博客来了解 cmake 的完整用法
https://www.hahack.com/codes/cmake/
http://www.renlei.co/article/182.html
首先确保已经安装了cmake,然后建立一个CMakeLists.txt文件,CMakeLists.txt文件中的具体内容如***:CMakeLists.txt文件你可以到你的OpenCV源代码解压出来的文件夹下的opencv-2版本的/samples/c/example_cmake/
或者opencv-3版本的/samples/cpp/example_cmake/
文件夹下拷过来,然后再做修改):
PROJECT(Example) //这是建立一个工程项目(类似于我们VS中建立C++项目一样),括号里面时工程名,工程名我们可以任意给,最后程序编译出来的可执行文件就是这个名字
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) //这是对CMake工具最低版本要求,这里我们要检查下我们的CMake工具的版本信息,我们可以使用命令“cmake --version”查看
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
FIND_PACKAGE( OpenCV REQUIRED ) //这是cmake用来查找opencv包用的,不用改
# Declare the target (an executable)
ADD_EXECUTABLE(Example Image_show.c) //这里括号里面的两个参数分别是工程项目名和我们要编译文件名的意思,记住中间一空格键隔开
TARGET_LINK_LIBRARIES(Example ${OpenCV_LIBS}) //这是我们链接到OpenCV库的环节,我们只要更改前面第一个参数位我们的工程项目名即可
#MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}") //好了,就修改这么点东西,保存,关闭。
更简短的版本可以看下面这个,都一样:
cmake_minimum_required(VERSION 2.8)
project(可执行文件名称)
find_package(OpenCV REQUIRED)
add_executable(可执行文件名称 源文件.cc)
target_link_libraries(可执行文件名称 ${OpenCV_LIBS})
project()
括号里面填写要生成的可执行文件名称,add_executable()
及target_link_libraries()
也一样。接下来执行:
cmake .
make
./可执行文件名
4.安装Python版opencv使用国内镜像下载方法
Python pip用国内镜像下载的办法及import cv2
原文地址:http://blog.csdn.net/u010536377/article/details/50564185
一直想在Ubuntu安装opencv,结果各种出错,现在有一个最简单的办法:
sudo pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ opencv-contrib-python
问题搞定。尤其是提示了问题ReadTimeoutError: HTTPSConnectionPool(host=‘pypi.python.org’, port=443): Read timed out.后,用国内镜像下载分分钟搞定。
5.python3中无法import cv2,importError
python3中无法import cv2
,出现以下情况
importError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so
解决办法:在你运行出错的那个Python文件中,在import sys
之后,import cv2
之前,加上一句sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
如果不能解决,更详细方案可参考 https://blog.csdn.net/shaoyou223/article/details/82862051