ubuntu下opencv C++环境搭建
由于很少用C++,对于opencv的C++使用感到很头疼,光是环境搭建就让我google了好久,官方也没有给出细节操作,为什么就不能像python一样一个pip就搞定了呢?所幸终于调通,遂小记一手,以免以后再次被搞得头皮发麻
opencv 安装
参考我之前的文章,完成基本的opencv安装(只是得到文件,还得配置一些path)
常见错误
先放出测试代码
#include <iostream>
using namespace std;
#include "opencv2/opencv.hpp"
using namespace cv;
int main()
{
VideoCapture capture(0); //调用摄像头
while (1) //循环显示每一帧
{
Mat frame; //储存一帧图像
capture>>frame; //读取当前帧
imshow("调用摄像头", frame); //显示当前读入的一帧图像
waitKey(10); //延时10ms
}
return 0;
}
这是一段调用摄像头的测试代码,很多博客都是用的图片测试。我真服了,我系统里就没有图片。直接用摄像头不就完事了吗?
接下来就是怎么编译这段代码了
如果直接拿vscode run的话会出莫名奇妙的错误,如
/tmp/ccXURwsj.o:在函数‘main’���:
tempCodeRunnerFile.cpp:(.text+0x2b):对‘cv::VideoCapture::VideoCapture(int)’未定义的引用
tempCodeRunnerFile.cpp:(.text+0x3e):对‘cv::VideoCapture::operator>>(cv::Mat&)’未定义的引用
tempCodeRunnerFile.cpp:(.text+0x99):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
tempCodeRunnerFile.cpp:(.text+0xc1):对‘cv::waitKey(int)’未定义的引用
tempCodeRunnerFile.cpp:(.text+0x118):对‘cv::VideoCapture::~VideoCapture()’未定义的引用
常见的还有找不到opencv.hpp的
fatal error: opencv2/opencv.hpp
这些都是没有设置对路径造成的,g++找不到你的opencv文件。接下来就来配置一手。
环境配置
在我之前那篇文章中已经提到了opencv.pc的问题
将下面的代码放到.bashrc最后一行
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
然后尝试编译代码
g++ `pkg-config opencv --cflags` opencv.cpp -o opencv `pkg-config opencv --libs`
应该能成功,生成编译好的程序。我还没找到能直接像下面那样编译的方法
g++ opencv.cpp -o opencv
接下来运行,可能会出现
error while loading shared libraries: libopencv_highgui.so.4.1: cannot open shared object file: No such file or directory
在文件夹中查找该文件,发现他其实就在/usr/local/lib中
打开/etc/ld.so.conf
在文件中加上一行
include /usr/loacal/lib
然后生效
sudo ldconfig
这个时候应该就能运行了