目录
OpenCV介绍
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
C++版本的 OpenCV库安装
下载release版本:Releases - OpenCV
从git仓库下载:git clone https://github.com/opencv/opencv.git
本文档下载的是opencv 4.5.5 版本。
进入opencv目录进行编译安装 ,
OPENCV_GENERATE_PKGCONFIG=ON是生成.pc文件,给pkg-config使用。
$ cd opencv
$ mkdir build
$ cmake -DOPENCV_GENERATE_PKGCONFIG=ON ..
$ make
$ make install
opencv 库安装所在目录为
库文件:/usr/lib/x86_64-linux-gnu/
头文件:/usr/local/include/opencv4/
OpenCV库的使用示例
根据OpenCV with C++ — OpenCV Guide documentation里的示例显示视频
示例如下:
$ ls
Makefile opencv_test.cpp versal.mp4
opencv_test.cpp 如下:
#include <stdio.h>
#include <opencv4/opencv2/opencv.hpp>
int main(int argc, char** argv )
{
cv::Mat frame; // variable frame of datatype Matrix
cv::VideoCapture capture;
capture.open("versal.mp4");
for(;;){
capture>>frame;
if(frame.empty())
break;
cv::imshow("Window", frame);
if(cv::waitKey(30)>=0)
break;
}
return 0;
}
Makefile:
opencv_test:
g++ opencv_test.cpp -o opencv_test `pkg-config --libs opencv4` -I/usr/local/include/opencv4/
clean:
rm -rf opencv_test
编译并运行:
$ make
g++ opencv_test.cpp -o opencv_test `pkg-config --libs opencv4` -I/usr/local/include/opencv4/
$ ls
Makefile opencv_test opencv_test.cpp versal.mp4
$ ./opencv_test
遇到错误:
OpenCV(4.5.5) /home/wq/Project/opencv-4.5.5/modules/highgui/src/window.cpp:1268: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
解决办法:
$ sudo apt-get install libgtk2.0-dev
随后执行opecv_test成功,打开versal.mp4播放界面。
OpenCV库里的人体检测功能
示例代码如下:
$ ls
Makefile opencv_test.cpp versal.mp4
opencv_test.cpp 如下:
#include <stdio.h>
#include <opencv4/opencv2/opencv.hpp>
int main(int argc, char** argv )
{
int thickness = 2;
cv::Mat frame;
cv::VideoCapture capture;
cv::HOGDescriptor hog;
std::vector<cv::Rect> foundLocations;
cv::Point p1(0, 0);
cv::Point p2(0, 0);
capture.open("versal.mp4");
for(;;)
{
capture>>frame;
if(frame.empty())
break;
hog.setSVMDetector(hog.getDefaultPeopleDetector());
hog.detectMultiScale(frame, foundLocations);
p1.x = cvRound(foundLocations[0].x);
p1.y = cvRound(foundLocations[0].y);
p2.x = cvRound(foundLocations[0].x+foundLocations[0].width);
p2.y = cvRound(foundLocations[0].y+foundLocations[0].height);
// Drawing the Rectangle
cv::rectangle(frame, p1, p2, cv::Scalar(255, 0, 0), thickness, cv::LINE_8);
cv::imshow("Window", frame);
if(cv::waitKey(30)>=0)
break;
}
return 0;
}
Makefile 如下:
opencv_test:
g++ opencv_test.cpp -o opencv_test `pkg-config --libs opencv4` -I/usr/local/include/opencv4/
clean:
rm -rf opencv_test
编译并运行:
$ make
g++ opencv_test.cpp -o opencv_test `pkg-config --libs opencv4` -I/usr/local/include/opencv4/
$ ./opencv_test
结果实现 能成功检测到人体,并用蓝色长框把人体框起来。