欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树莓派安装opencv打开摄像头实现实时传输

程序员文章站 2022-04-24 11:13:21
...

OpenCV简介:opencv是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。(扩展阅读)
其实安装与使用OpenCV库非常简单,平常做图像处理算法处理的时候大家经常习惯用MATLAB,虽然MATLAB具有强大的工具箱,但是无法达到实时的效果,这一点小编一点也不喜欢,在这篇文章中,我将使用Banana Pi M2U与树莓派来演示安装OpenCV库与运行使用OpenCV库编写的程序。小编的这两块板子均移植的是Linux操作系统。(什么?没学过linux? …… 哎,那也不用慌张,这里只用到了一些基本的Linux指令,大家在有看不懂指令的时候可百度一下)。首先我们来看下环境配置,(等一下,小编,我也没学过ARM,没有硬件基础)其实在这里大家完全不用操心,我们根本没用到硬件知识,此时的香蕉派与树莓派只是相当于一个小电脑。
(1)树莓派或者香蕉派(已经移植完linux操作系统,关于如何在电脑上linux系统移植及配置opencv ,小编会在后续的帖子中提到)
(2)USB摄像头一个
准备好硬件资源以后,我们即刻开始(注意,我这里是移植的是2.4.9版本,不同版本略有区别)
下载与安装:
在安装OpenCV库之前,我们需要更新一下软件源:

1sudo apt-get update  

然后开始安装OpenCV库:

    2、sudo apt-get install libcv-dev

做到这一步的时候我们可以暂时去喝口水,耐心的等待一会儿,等到安装完成。我们就可以开始来写第一个程序了。
其实使用OpenCV库,会使代码更容易阅读,更加整洁,根本不再需要重复造*!小编个人极其喜欢偷懒,经过简化之后,大概十余行即可打开摄像头。小编有个群193369905,里面分享的均是机器视觉的资料。

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
VideoCapture cap(0);           //打开摄像头
// 如果要打开本地视频采用  VideoCapture cap("***.avi");
if(!cap.isOpened())  return -1;     //检测一下摄像头是否打开
Mat frame;  
while(1){
cap>>frame;        //读取当前帧
// 此处可添加图像处理算法,对图像进行处理,当然了,我们可以不做任何操作,只打开一下摄像头
imshow("Xiaorun OpenCV CAM", frame);    //显示一下
if(waitKey(20) >=0) break;       // 等待按键,跳出循环
}
return 0;
}

就这样我们就编写完了一个打开摄像头的程序,将以上代码保存为xiaorun.cpp,并在shell敲一下它g++ -o xiaorun ./xiaorun.cpp -lopencv_core -lopencv_highgui
编译完之后不出意外的话应该没有错误,我们会在当前目录下看到一个可执行文件,xiaorun,我们运行一下 ./ xiaorun
dang dang dang 这时候屏幕就可以看到摄像头里的图像了,小编颜值不高,在这里就不挂出自拍了。
上面的例子已经成功将摄像头的图像显示在屏幕上,不过这还不够炫酷~,完全不能让小编玩high.接下来我想在上述的空白处添加三行代码,以实现可实现实时的边缘检测

#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);//把图像转换为灰度图像
blur(edges,edges,Size(7,7));//模糊降噪
Canny(edges,edges,3,9,3);//Canny 边缘检测


imshow("Xiaorun OpenCV Canny", edges);
if(waitKey(20) >=0) break;
}
return 0;
}      

同样 ,我们保存为xiaoruncanny.cpp ,编译一下 g++ -o xiaorun ./xiaorun.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc
当然木有错误了,只是稍稍加一个头文件和三行代码,OK,运行一下吧 ./ xiaorun
机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。OpenCV的更多例子大家可以在网上找到~OpenCV可以应用在各种场合,例如跟踪小车,人脸识别等,小编在此仅抛砖引玉,此处只有一个基本框架,大家可以参考,自行编写算法,玩的更High~感兴趣的可加群193369905,小编承接各种AI小项目开发 利用这个做的水下机器人