opencv+树莓派+自带摄像头 获取视频

本文介绍如何在树莓派上安装配置OpenCV,并利用第三方库raspicam实现从树莓派自带摄像头读取视频帧的过程。文章详细记录了安装步骤及测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树莓派自带摄像头读取视频

以前没有接触的树莓派的时候觉得这货应该和在Ubuntu差不多,就先写完了程序,调试好了放到树莓派上运行的时候,结果死活不能得到视频一帧,在网上找了很多资料,整理如下。


*可以shell脚本,如若不会百度,也可以把命令直接敲进终端(#!/bin/bash是shell脚本的一部分,不必敲到终端)*

opencv 安装

  下载你想安装的版本,解压进入目录文件,执行以下命令进行编译(脚本执行更方便)
#!/bin/bash
    mkdir release
    cd release
    cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local ..
    make
    sudo make install
    echo 
    ‘PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 

export PKG_CONFIG_PATH ’ >> /etc/bash.bashrc
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

方法(测试可行)

使用三方库解决

  • 安装GTK

  • 安装Cmake

  • 安装pkg-config

  • 安装Numpy

#安装命令
#!/bin/bash
    apt-get install libgtk2.0-dev 
    apt-get install cmake
    apt-get install pkg-config
    apt-get install Python-numpy
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后编译的时候两种方式 
1 cmke方式 
2 gcc/g++方式 
我比较喜欢后者,现给出后者的编译方式

g++ mian.cpp -o main `pkg-config --cflags --libs opencv` 最后的符号是tab键的上方
 
  • 1
  • 1

以上是OpenCV安装过程,接下来就是树莓派自带摄像头三方库的安装

#!/bin/bash
    cd raspicam
    mkdir build
    cd build
    cmake ..
    make
    sudo make install
    sudo ldconfig

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面一切顺利的话,接下来就可以对你的环境进行测试了。 
测试程序如下:

/* 这是github上,opencv测试的例子*/
#include <ctime>
#include <iostream>
#include <raspicam/raspicam_cv.h>
using namespace std; 

int main ( int argc,char **argv ) {

    time_t timer_begin,timer_end;
    raspicam::RaspiCam_Cv Camera;
    cv::Mat image;
    int nCount=100;
    //set camera params
    Camera.set( CV_CAP_PROP_FORMAT, CV_8UC1 );
    //Open camera
    cout<<"Opening Camera..."<<endl;
    if (!Camera.open()) {cerr<<"Error opening the camera"<<endl;return -1;}
    //Start capture
    cout<<"Capturing "<<nCount<<" frames ...."<<endl;
    time ( &timer_begin );
    for ( int i=0; i<nCount; i++ ) {
        Camera.grab();
        Camera.retrieve ( image);
        if ( i%5==0 )  cout<<"\r captured "<<i<<" images"<<std::flush;
    }
    cout<<"Stop camera..."<<endl;
    Camera.release();
    //show time statistics
    time ( &timer_end ); /* get current time; same as: timer = time(NULL)  */
    double secondsElapsed = difftime ( timer_end,timer_begin );
    cout<< secondsElapsed<<" seconds for "<< nCount<<"  frames : FPS = "<<  ( float ) ( ( float ) ( nCount ) /secondsElapsed ) <<endl;
    //save image 
    cv::imwrite("raspicam_cv_image.jpg",image);
    cout<<"Image saved at raspicam_cv_image.jpg"<<endl;
}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

编译:g++ test_cv.cpp -o test_cv -I/usr/local/include/ -lraspicam_cvpkg-config –cflags –libs opencv

### 实现树莓派通过VNC实现实时摄像头预览 由于VNC的工作机制基于指令传输而非实际的画面流,因此默认情况下,在使用VNC Viewer连接至树莓派时无法直接查看由`start_preview()`函数启动的摄像头预览[^1]。然而,可以通过其他方法间接实现这一功能。 #### 方法一:利用OpenCV库进行图像处理与展示 一种解决方案是采用Python中的OpenCV库来捕获并显示视频帧。这种方法绕过了PiCamera模块自带预览功能的局限性,允许在任何支持图形界面的应用程序中嵌入实时视频流,包括但不限于VNC会话。 ```python import cv2 from picamera.array import PiRGBArray from picamera import PiCamera camera = PiCamera() rawCapture = PiRGBArray(camera) for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): image = frame.array # 展示每一帧图片 cv2.imshow("Frame", image) key = cv2.waitKey(1) & 0xFF rawCapture.truncate(0) if key == ord("q"): break cv2.destroyAllWindows() ``` 此脚本创建了一个无限循环,持续获取来自摄像头的新帧,并将其作为窗口的一部分呈现给用户。当按下键盘上的 'q' 键时终止该过程[^5]。 #### 方法二:借助第三方服务或软件转发RTSP流 另一种更为复杂但也更加灵活的方式涉及设置一个媒体服务器(如FFmpeg),它可以从树莓派接收H.264编码的数据流并通过网络分发出去。之后可以在任意设备上安装相应的客户端应用程序订阅这个数据源,从而达到观看目的。不过这种方式超出了简单编程范畴,涉及到更多关于音视频编解码的知识和技术栈配置工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值