前言:

之前写过一篇在nano上使用opencv,nano上默认是安装了opencv的库,除了nano,我们自己电脑上也想使用opencv做一些平时图像处理验证。

本来也是看一些资料安装好的,觉得也没必要写。但是实际安装还是出现了不少问题,所以记录分享一下。

环境:
系统为ubuntu20.04
cv版本为 4.5

作者:良知犹存

转载授权以及围观:欢迎关注微信公众号:羽林君

或者添加作者个人微信:become_me


oepncv介绍:

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。

OpenCV用C++语言编写(基本上现在新的开发和算法都是用C++接口),它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以透过在线文档获取。现在也提供对于C#, Ch,Ruby的支持。

OpenCV可以在Windows, Android, Maemo, FreeBSD, OpenBSD, iOS, Linux和Mac OS等平台上运行。用户可以在Github获得官方版本,或者从Git获得开发版本。OpenCV也是用CMake.

安装:

到了安装环节了,先装一堆依赖包。

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev  pkg-config

下载opencv,下载地址:https://opencv.org/releases/,大可以点击Sources进行下载自己需要的版本。

刚开始选择了4.1 安装出错之后,选择了 4.5就一路按照4.1的经验就装好了,所以建议装最新的。

下载之后,我们就开始编译安装了,

常规操作:

cd opencv-4.5.5
mkdir build
cmake ../
make
sudo make install

但是事情不是按照命令这么发展的,命令很少,解决问题确是很多。

cmake编译的时候,推荐一个cmake图形化工具,很方便。

sudo apt install cmake-qt-gui cmake-gui ../

我们Search一栏选择我们要配置的cmake 选项,然后选择 generate生成就好了。

cmake ../之后开始make:

make -j8

eigen库未安装
遇到fatal error: Eigen/Core: No such file or directory 这个错误:

方法1:

执行命令:sudo apt-get install libeigen3-dev 进行安装。

方法2:
因为我安装过一次了,所以我查看了一下我的eigen,使用是locate 查询了一下,locate eigen3

/usr/include/eigen3

/usr/include/eigen3/Eigen

发现了我的Eigen在eigen3目录下。

所以我写了一个软链进行了链接

sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen

继续编译 make -j8

编译 opencv 出现 internal compiler error:Segmentation fault,并且一直出现。

出错的原因是(虚拟机)运行内存不足,而大量template的扩展需要足够的内存。

下面给大家分享一种方法解决这个报错,我选择不管,继续编译。

可以通过临时使用交换分区来解决:

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=1024MB
sudo mkswap /swapfile
#把刚才空间格式化成swap格式
sudo swapon /swapfile
#使用刚才创建的swap空间
在编译完成后,最好可以关闭(释放)交换空间

sudo swapoff /swapfile
sudo rm /swapfile

以上交换分区方法为引用了别的博主的片段

编译的时候,也设置 cmake 选项 ENABLE_PRECOMPILED_HEADERS=OFF ,启用预编译头支持。缩短构建时间。

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ENABLE_PRECOMPILED_HEADERS=OFF

继续 make -j8

终于编译完成,进入了安装阶段 make install

sudo make install

可以看到安装的动态库和文件都在/usr/local/目录里面

配置全局环境

OpenCV4默认不生成.pc文件,所以我们需要自己去设置,也有人建议cmake后再加一条-D OPENCV_GENERATE_PKGCONFIG=ON才会生成。该编译选项开启生成opencv4.pc文件,就支持pkg-config功能,这个部分大家可以自行去尝试一下,我自己使用了手动添加的方法,比较笨,但是可以用。

cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo vi opencv.pc

文件内容如下:对应的Version大家按照自己的版本修改,libs内容需要微调,后面有给我自己的情况。

prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/libName: OpenCV
Description: Open Source Computer Vision Library
Version: 4.5.5
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

后续在使用makefile -L链接时候 发现本机上面-lopencv_xfeatures2d 没有此动态库,所以就去掉了,大家也可以自行去测试,有些部分的版本有点区别,对应makefile的操作,大家可以移步看我之前的文章:jetson-nano opencv基础使用

sudo vi /etc/bash.bashrc

修改bash.bashrc文件,增加如下文件

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

再执行source /etc/bash.bashrc

这样之后,我们就可以pkg-config查询对应安装好的opencv信息了

pkg-config --modversion opencvpkg-config --libs opencv 

此外我们也可以通过使用python3 import cv2的方法查询opencv是否安装成功

lyn@lyn:/usr/local/lib/pkgconfig$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.5.5
>>> 

对应的截图:

十几行C++代码实现一个人脸识别

#include <stdio.h>
#include <iostream>
#include <vector>
#include<opencv2/opencv.hpp>
using namespace cv;using namespace std;void face_detection_demo()
{std::string root_dir = "/home/lyn/Documents/opencv/learn_code/face_detector/";dnn::Net net = dnn::readNetFromTensorflow(root_dir+ "opencv_face_detector_uint8.pb", root_dir+"opencv_face_detector.pbtxt");VideoCapture capture(0);Mat frame;while (true) {capture.read(frame);if (frame.empty()) {break;}flip(frame, frame, 1);//左右翻转 y对称Mat blob = dnn::blobFromImage(frame, 1.0, Size(300, 300), Scalar(104, 177, 123), false, false);net.setInput(blob);// NCHWMat probs = net.forward(); // Mat detectionMat(probs.size[2], probs.size[3], CV_32F, probs.ptr<float>());// 解析结果for (int i = 0; i < detectionMat.rows; i++) {float confidence = detectionMat.at<float>(i, 2);if (confidence > 0.5) {int x1 = static_cast<int>(detectionMat.at<float>(i, 3)*frame.cols);int y1 = static_cast<int>(detectionMat.at<float>(i, 4)*frame.rows);int x2 = static_cast<int>(detectionMat.at<float>(i, 5)*frame.cols);int y2 = static_cast<int>(detectionMat.at<float>(i, 6)*frame.rows);Rect box(x1, y1, x2 - x1, y2 - y1);rectangle(frame, box, Scalar(0, 0, 255), 2, 8, 0);}}imshow("人脸检测演示", frame);int c = waitKey(1);if (c == 27) { // 退出break;}}
}int main(int argc,char **argv) {face_detection_demo();return 0;
}

CMakeLists.txt文件

cmake_minimum_required( VERSION 2.8 )
project(opencv_test)
set(CMAKE_CXX_FLAGS  "-std=c++14 ${CMAKE_CXX_FLAGS} -Wall -Wformat -Wformat-security -Werror=format-security -Wunreachable-code")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(opencv_test main.cpp )
target_link_libraries(opencv_test  ${OpenCV_LIBS})

对应的CMakeLists.txt文件和jetson-nano opencv基础使用基本一样。详细注解大家可以移步去看这篇文章。

上面那两个文件是调用opencv里面dnn的例子,对应的文件获取方式如下:

涉及到pb文件需要下载,有可能出现下载失败的情况,如果大家需要这个文件,也可以加我微信,我私发给需要的朋友们。

其中opencv_face_detector.pbtxt文件在samples/dnn/face_detector/目录中

cd opencv-4.5.5/samples/dnn/face_detector/
ls

opencv_face_detector_uint8.pb比较麻烦些,需要下载。方式如下:

cd opencv-4.5.5/samples/dnnpython3 download_models.py

有Caffe模型,还有tensorflow模型。我们用的tensorflow模型,opencv_face_detector_uint8.pb文件就是从这里来。

Scalar(104, 177, 123)这个参数是/opencv-4.5.5/samples/dnn里面对应的,models.yml文件里面有。


如上所示,我也是直接使用了。

最终实现效果如下:

结语

这就是我自己安装opencv的过程分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。


作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

opencv安装实录附十几行C++实现的一个人脸识别demo相关推荐

  1. 树莓派交叉编译opencv3.4.1/pycharm安装opencv/实现人脸识别Demo记录

    目录 文章目录 目录 前言 树莓派交叉编译opencv3.4.1 安装环境 开始交叉编译 错误记录 WIN10+Anaconda+PyCharm安装opencv3.4.7 WIN10下opencv人脸 ...

  2. python怎么判断真假_Python不超过10行代码就可实现人脸识别,教你辨别真假

    [[爱编程的南风]Python不超过10行代码就可实现人脸识别,教你辨别真假]http://toutiao.com/group/6518157903055045127/?iid=15906422033 ...

  3. python提取个十百千位数字_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    之前写过一篇关于实现人脸识别的文章, Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序​zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的, ...

  4. 【javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码)】

    javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码) 文章目录 javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄 ...

  5. 用PyQt5+Caffe+Opencv搭建一个人脸识别登录界面

    最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的想法是用opencv自带的人脸检测算法检测出面部,利用caffe训 ...

  6. 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  7. 零基础用一百行代码完成动态的人脸识别(opencv+python)

    废话:(其实是介绍了一下该文章的大概来路)   电子化的时代到处都能看到人脸识别的用途:比如:刷脸门禁,火车站检票口,又比如检查站,还有一些比较高端的汽车还支持刷脸开门等等. 近期呢接了个学校的一个项 ...

  8. python1000行代码_写个人脸识别程序员,C可能要两千行代码,Java两百!但是Python只需二十行即可!...

    今天给大家介绍一个世界上最简洁的人脸识别库 face_recognition,你可以使用 Python 和命令行工具进行提取.识别.操作人脸. 基于业内领先的 C++ 开源库 dlib 中的深度学习模 ...

  9. python毕业设计论文-25 行 Python 代码毕业设计实现人脸识别

    文章来源:淘论文网 发布者:毕业设计 浏览量: 请确保用的是 OpenCV v2 你需要一个网络摄像头 OpenCV OpenCV 是最流行的计算机视觉库,原本用 C 和 C++ 开发,现在也支持 P ...

最新文章

  1. 你哪来这么多事(五):职工信息插入
  2. 我为什么最终放弃了 Linux 桌面版的研发
  3. I am too vegetable to all kill the 51nod problems on level 2 and 3.
  4. JPEG2000开发SDK及其特点
  5. JavaWeb_EL表达式存储数据及获得项目路径
  6. 原来理解 AOP 可以这么简单
  7. 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树
  8. Linux学习笔记(1)linux的开关机及重启
  9. 拓端tecdat|约会数据动态可视化分析:R语言使用ggplot和ganimate制作的动画图
  10. 第十一章 缓存机制——《跟我学Shiro》[张开涛]
  11. 一文吃透电源中的纹波、噪声和谐波
  12. 一些关于CCNA考试的感受
  13. **python 随机生成一段旋律**
  14. serv-u and hway3.0
  15. 互联网公司常用架构模式梳理
  16. R统计绘图-corrplot热图绘制细节调整2(更改变量可视化顺序、非相关性热图绘制、添加矩形框等)
  17. 从2019年报看苏宁易购的全品类+全场景零售融合变革
  18. 佐治亚理工计算机科学,佐治亚理工学院计算机科学面试经验汇总
  19. 计算机键盘输入错乱,win10电脑键盘错乱的三种解决方法
  20. Java中合理使用局部变量替代成员变量、静态变量

热门文章

  1. python利用微信的方法_用Python玩转微信
  2. DeepLearning with Pytorch Chapter04
  3. FI中常用表和凭证类型
  4. csdn博客积分规则与等级说明
  5. 谁说 C/C++ 没有好的包管理器?这里来一沓!C/C++学习者建议收藏
  6. opencv 标定 3D项目 四
  7. 重磅开源:基于.NET 6.0 自研轻量级ORM框架
  8. jquery 自定义正方形图标_苹果ios14桌面小组件怎么改图标 更换桌面图标设置教程...
  9. 手机网站常用的推广方式有哪些
  10. 转载过来的一些嵌入式资料