程序之美
前言
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。我们生活中遇到的很多图形图像处理的应用和软件都或多或少的会借鉴或应用此库,
故此,亲自研究,实践,Linux下的OpenCV,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学OpenCV的小伙伴,避免走弯路,费时费力。
主体
本篇我们先学习下OpenCV在Ubuntu 20.04下的编译与安装。
下载
进入opencv官网下载
选择sources下载相应版本的压缩包。
我这里是github下载的,下载地址为:https://github.com/opencv/opencv
解压文件,放到home/(用户名)/目录下,我这里下载的是OpenCV-4.6.0。
安装命令
unzip OpenCV-4.6.0.zip
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …
make -j4
make install
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
如果按照make -j${proc}进行编译,常出现卡死状态,后来改为make -j4就能顺利通过了。
环境配置
编辑/etc/ld.so.conf
sudo gedit /etc/ld.so.conf
- 1
在文件中加上一行
include /usr/local/lib
- 1
保存文件退出,编辑 /etc/bash.bashrc 文件
sudo gedit /etc/bash.bashrc
- 1
在文件末尾加上几行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
- 1
- 2
保存文件退出。
查看是否opencv成功:
pkg-config --modversion opencv # 出现版本号即成功
- 1
将opencv加入环境变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
- 1
所遇问题
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
- 1
- 2
- 3
- 4
该如何解决呢?
方法一,尝试未解决:
sudo apt install libopencv-dev htm
- 1
方法二,解决问题。
方法如下:
cd /usr/local/lib
sudo mkdir pkgconfig
cd pkgconfig
sudo touch opencv.pc
sudo vim opencv.pc
- 1
- 2
- 3
- 4
- 5
- 6
首先建一个新的文件夹:pkgconfig
然后cd到这个文件夹下,新建opencv.pc文件;
再打开opencv.pc文件,文件内输入:
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: opencv
Description: The opencv library
Version:4.1.2
Cflags: -I
i
n
c
l
u
d
e
d
i
r
/
o
p
e
n
c
v
4
L
i
b
s
:
−
L
{includedir}/opencv4 Libs: -L
includedir/opencv4Libs:−L{libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
其中version是你的opencv版本。
最后:wq保存退出。
测试代码:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);
if (!cap.isOpened())
{
printf("Can not open a camera\n");
return -1;
}
while (true)
{
Mat frame, hsvedges, edges;
cap >> frame;
if (frame.empty())
break;
cvtColor(frame, hsvedges, COLOR_BGR2HSV);
imshow("hsvedges", hsvedges);
cvtColor(frame, edges, COLOR_BGR2GRAY);
Canny(edges, edges, 175, 255, 3);
imshow("edges", edges);
//等待 30 秒,如果按键则推出循环
if (waitKey(30) >= 0)
break;
}
waitKey(0);
return 0;
}