安装最新版的 OpenCV 可以解决大部分的兼容性问题。
链接:https://pan.baidu.com/s/16dLygT8zLYCJi28TKvocFw
提取码:xc6g
解压 zip 格式的源码后,在解压后的目录中进入 apps 文件夹:
unzip opencv-4.4.0.zip
必须安装的依赖包:
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
此时,如果 apt-get 出现"软件包有未满足的依赖关系“问题。
此问题的解决办法:使用 aptitude 。
aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。
运行后,不接受未安装方案,接受降级方案。这样,就可以成功安装库了。
此时的命令执行,我们需要在之前进入的 apps 文件夹目录下。当然,这个目录可能每个人的都不一样,以下命令的执行需要 CMakeLists.txt 文件。这个文件在我的虚拟机上是在 apps 文件夹下。所以,如果编译时报错找不到文件,请在自己的虚拟机上进行查找,然后进入相应文件夹下,进行以下指令。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
sudo make install
其中,第二个指令 sudo make 可能执行的时间比较长,我的Ubuntu执行了2个多小时才结束。
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
首先新建一个 QT 文件,这里创建了有默认代码的 QT 文件,然后打开 pro 文件,为其配置 opencv:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
//这里的路径请根据自己的实际情况进行修改
//这里的路径应该是逐级写的,写的是存放库文件的路径(如理解错误,请大佬指出)
//我的路径就是:/usr/local/include/opencv4/opencv2
//详见下面的第一张图
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv4 \
/usr/local/include/opencv2
//这里的路径请根据自己的实际情况进行修改
//这个应该是同样的道理
//我的路径就是:/usr/local/lib
//详见下面第二张图
LIBS += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_imgcodecs.so
#include
#include
#include
using namespace cv;
int main()
{
Mat img = imread("群岛.jpg");//存放图像的路径
line(img,Point(1,1),Point(250,250),Scalar(0,0,255),5);//画一条直线
namedWindow("island",0);//创建窗口
resizeWindow("island", 1000, 500); //创建一个1000*500大小的窗口
imshow("island",img);//在创建的窗口中显示图片
waitKey(0);
return 0;
}
需要注意的是:读取图片的时候,如果像上面的程序一样写相对路径的话,需要将图片放入项目的 debug 目录下,不能放在源程序所在的目录下。否则,请写绝对路径。下面,还会展示一个绝对路径的例子。
#include
#include
#include
using namespace cv;
int main()
{
Mat img = imread("/mnt/hgfs/My Share/冬景.jpg");//存放图像的路径
line(img,Point(1,1),Point(250,250),Scalar(0,0,255),5);//画一条直线
namedWindow("winter",0);//创建窗口
resizeWindow("winter", 1000, 500); //创建一个1000*500大小的窗口
imshow("winter",img);//在创建的窗口中显示图片
waitKey(0);
return 0;
}