OpenCV
文章目录
apt安装
下载依赖
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
出现错误 “无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
原因 :
系统中已经安装了被依赖的包的高版本。
高级安装:
解决方法:
使用aptitude进行安装,aptitude 会对依赖关系进行智能处理
sudo apt-get install aptitude
sudo aptitude install <package name>
安装:
sudo apt-get install libopencv-dev
若镜像源没改可能会报错,自行修改
更新
sudo apt-get update
sudo apt-get upgrade
查看版本
dpkg -s libopencv-dev
查看opencv安装库
pkg-config opencv4 --libs
查看opencv安装版本:
pkg-config opencv4 --modversion
opencv安装路径:
sudo find / -iname "*opencv4*"
编译
g++ v.cpp -o v -lopencv_core -lopencv_highgui -lopencv_videoio
opencv头文件的路径中多了一个opencv4
fatal error: opencv2/opencv.hpp: No such file or directory
#include <opencv2/opencv.hpp>
解决方案
这是因为opencv头文件的路径中多了一个opencv4的文件夹:
/usr/include/opencv4/opencv2
可以将opencv2拷贝到自己的include文件夹
可以将opencv2文件夹链接到include文件夹下
sudo ln -s /usr/include/opencv4/opencv2 /usr/include/
安装之后的文件
头文件
(apt /usr/include/opencv4/opencv2)
动态库
(apt /usr/lib/x86_64-linux-gnu/)
训练模型
(apt /usr/share/opencv4)
source下载
安装 OpenCV 4.6.0 的步骤如下:
-
安装依赖项:首先,确保你的系统安装了必要的依赖项。运行以下命令以安装常见依赖项:
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
-
创建构建目录:打开终端,并在你解压 OpenCV 源代码的目录中创建一个新的构建目录。进入该目录:
cd opencv-4.6.0 mkdir build cd build
-
配置构建:运行 CMake 命令来配置构建过程。以下是一个示例命令:
cmake ..
你可以根据需要添加其他选项来配置构建过程。例如,如果你使用 Python,可以添加
-D BUILD_PYTHON_SUPPORT=ON
选项启用 Python 支持。 -
编译和安装:运行以下命令来编译和安装 OpenCV:
make -j$(nproc) sudo make install
这将使用多个线程进行编译,并在完成后将 OpenCV 安装到系统中。
-
配置动态链接库:为了让系统能够找到并加载 OpenCV 库,你需要配置动态链接库。打开终端,编辑
/etc/ld.so.conf.d/opencv.conf
文件:sudo nano /etc/ld.so.conf.d/opencv.conf
将以下内容添加到文件中:
/usr/local/lib
保存文件并退出编辑器。然后运行以下命令更新链接库配置:
sudo ldconfig
人脸识别
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/objdetect.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
int main(int argc, char const *argv[])
{
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "ERROR! Unable to open camera" << endl;
return 0;
}
cout << "Camera open sucessful" << endl;
// 集联分类器 (实例化)
CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
// 用容器存放一张图片
Mat ColorImage; // Mat容器种类 frame实例
Mat GrayImage;
vector<Rect> AllFace;
Mat MatFace;
vector<uchar> JpgFace;
for (;;)
{
cap >> ColorImage; // cap 拍摄一张照片放到Colorimage这个容器里面
cvtColor(ColorImage, GrayImage, COLOR_BGR2GRAY); // 转换为灰度图,存放到GrayImage容器里
equalizeHist(GrayImage, GrayImage); // 均衡化
Classifier.detectMultiScale(GrayImage, AllFace); // 人脸检测
if (AllFace.size())
{ // 检测是否有人脸
rectangle(GrayImage, AllFace[0], Scalar(255, 255, 0)); // 把容器AllFace中的矩形框画在图像上 (Scalar (蓝绿红))
MatFace = GrayImage(AllFace[0]); // 截取图像中人脸部分
imencode(".jpg", MatFace, JpgFace);
}
imshow("video", GrayImage);
waitKey(42); // 阻塞(单位毫秒)
}
return 0;
}