OpenCV简介:
安装与使用OpenCV库非常简单,在这篇文章中,我将使用Banana Pi M2来演示安装OpenCV库与运行使用OpenCV库编写的程序。**
**
下载与安装:
在安装OpenCV库之前,我们需要更新一下软件源:
sudo apt-get update
然后开始安装OpenCV库:
sudo apt-get install libcv-dev
经过漫长的安装与等待,OpenCV库已经安装好了,接下来我们来写第一个OpenCV程序。
快速上手OpenCV:
1. 查看当前OpenCV库版本:
目前,网上的OpenCV库的版本分为OpenCV2与OpenCV3,这两个版本的代码有细微的差异,如果不注意的话可能会出现编译出错等预料之外的情况。
所以,我们第一个程序就是输出已经安装的OpenCV库的版本号。
/*输出OpenCV库的版本号*/
#include <opencv2/core/core.hpp>
#include <stdio.h>
using namespace cv;
int main()
{
printf("OpenCV version is:%s\n",CV_VERSION);
return 0;
}
将以上代码保存为 opencv_ver.cpp 文件,使用g++来编译这段代码
g++ -o opencv_ver ./opencv_ver.cpp -lopencv_core
如果没有意外的话,编译会直接通过,会生成一个名为opencv_ver的可执行文件,让我们来执行一下
可以看到,Banana Pi 上安装的OpenCV库版本为2.4.9.1
2.输出摄像头影像
使用OpenCV库,会使代码更容易阅读,更加整洁,不再需要重复造轮子!
不到16行代码即可调用摄像头
/*调用摄像头,并将图像显示在屏幕上*/
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
VideoCapture cap(0);//打开摄像头
if(!cap.isOpened())return -1;
Mat frame;
while(1){
cap>>frame;//读取当前帧
imshow("XiaoLu OpenCV CAM", frame);
if(waitKey(20) >=0) break;
}
return 0;
}
将以上代码保存为 opencv_cam.cpp,并编译它
g++ -o opencv_cam ./opencv_cam.cpp -lopencv_core -lopencv_highgui
编译完这段程序我们不可以直接在SSH端执行它,会出错
我们需要在Banana Pi 外接的显示器上来使用它
当当当当~~可以看到摄像头的图像啦
3.模糊降噪Canny边缘检测
上面的例子已经成功将摄像头的图像显示在屏幕上,不过这还不够炫酷~
接下来的我们将使用OpenCV库处理图像,将彩色的图像变成黑白的线!
/*调用摄像头,使用Canny边缘检测处理图像*/
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
VideoCapture cap(0);//打开摄像头
if(!cap.isOpened())return -1;
Mat frame,edges;
while(1){
cap>>frame;//读取当前帧
cvtColor(frame,edges,CV_BGR2GRAY);//把图像转换为灰度图像
//cvtColor(frame,edges,COLOR_BGR2GRAY);//OpenCV3版
blur(edges,edges,Size(7,7));//模糊降噪
Canny(edges,edges,3,9,3);//Canny 边缘检测
imshow("XiaoLu OpenCV Canny", edges);
if(waitKey(20) >=0) break;
}
return 0;
}
将以上代码保存为 opencv_canny.cpp,并编译它
g++ -o opencv_canny ./opencv_canny.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc
编译完在Banana Pi上运行一下
C语言入门的一本书
本人大头照:victory::lol:victory:
总结
OpenCV的更多例子大家可以在网上找到~OpenCV可以应用在各种场合,例如跟踪小车,人脸识别等,本文仅抛砖引玉,希望大家能多了解关于计算机视觉方面的知识与姿势,玩的更High~:lol