使用OpenCV和BCM2835处理Raspberry Pi

时间:2013-06-27 23:43:21

标签: c++ linux opencv raspberry-pi gpio

我目前正在使用Raspberry Pi并使用Raspberry Pi相机模块。我计划在RPi上使用OpenCV进行图像处理,目前似乎没什么问题。但是,我试图将BCM2835库与OpenCV一起使用,并且无法集成它。 我试图在Makefile中进行更改并添加bcm库并添加BCM库的路径但似乎没有任何效果。在输入视频上进行一些图像处理后,请帮助我集成两个库,因为我希望驱动GPIO。

谢谢。

2 个答案:

答案 0 :(得分:1)

我终于找到了自己问题的答案。 bcm库可以在这里下载:http://www.airspayce.com/mikem/bcm2835/

是解压缩的,并且以下文件粘贴在我们正在使用的包含cpp文件的当前文件夹中。 bcm2835.h bcm2835.o bcm2835.c

我在CMakeLists.txt的add_executable中添加了bcm2835.c,如下所示: add_executable(camcv_vid2 bcm2835.c RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv_vid2.cpp)

在程序中添加bcm2835.h:extern“C”{ ..

包括“bcm2835.h”

.. }

使用主函数中的bcm2835_init()初始化GPIO,你很高兴。 使用GPIO可以获益。 总的来说,它结合了C和C ++文件以及CMakeLists.txt中的修改

享受!

答案 1 :(得分:1)

虽然这个话题已经超过 5 年了,但我仍然觉得有必要补充一个答案,因为我现在也一直在研究这个问题,并找到了一个替代方法。此方法不需要将bcm2835.c文件添加到add_executable,而是使用预编译库并链接

我在 Raspberry Pi 3 B 上运行 Ubuntu 20.04.1 LTS

设置库

  1. 使用以下方法下载 bcm2835 库:wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.xx.tar.gz;
  2. 使用 website 上的说明安装库:
    1. # download the latest version of the library, say bcm2835-1.xx.tar.gz, then:
    2. tar zxvf bcm2835-1.xx.tar.gz
    3. cd bcm2835-1.xx
    4. ./configure
    5. make
    6. sudo make check
    7. sudo make install
  3. CMakeLists.txt 文件中添加 find_library(BCM2835_LIB bcm2835)
  4. 确保使用 target_link_libraries(<target name> ${BCM2835_LIB}) 将库链接到目标
  5. 不再需要添加 extern "C" 部分,因为这已在库的头文件中处理。
  6. 在脚本文件中初始化 GPIO 的 bcm2835_init()

对于构建,我做了以下事情:

  1. 使用 mkdir build 创建构建文件夹并转到文件夹 cd build
  2. 运行 cmake .. 以设置编译设置和环境
  3. 运行 make <target name> 创建目标可执行文件或运行 make all 创建所有目标可执行文件

基于有效的 main.cpp (source ) 创建了一个名为 blink.c 的 cpp 文件:

#include "bcm2835.h"
using namespace std;
#define PIN RPI_BPLUS_GPIO_J8_07 // pin 4

int main(int argc, char **argv)
{
    if (!bcm2835_init())
        return 1;

    // Set the pin to be an output
    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

    // Blink
    while (1)
    {
        // Turn it on
        bcm2835_gpio_write(PIN, HIGH);

        // wait a bit
        delay(500);
        // turn it off
        bcm2835_gpio_write(PIN, LOW);
        // wait a bit
        delay(500);
    }

    return 0;

}

CMakeLists.txt 文件

#Declare the version of the CMake API for forward-compatibility
cmake_minimum_required(VERSION 2.8)

#Declare the name of the CMake Project
project(main)

find_library(BCM2835_LIB bcm2835)
if(NOT BCM2835_LIB)
  message(FATAL_ERROR "bcm2835_lib library not found")
else()
  message(STATUS "bcm2835_lib library found")
endif()

# Add the directory to search for header files
include_directories(include)

# Define an executable target 
add_executable(main main.cpp)
target_link_libraries(main ${BCM2835_LIB})