我目前正在使用Raspberry Pi并使用Raspberry Pi相机模块。我计划在RPi上使用OpenCV进行图像处理,目前似乎没什么问题。但是,我试图将BCM2835库与OpenCV一起使用,并且无法集成它。 我试图在Makefile中进行更改并添加bcm库并添加BCM库的路径但似乎没有任何效果。在输入视频上进行一些图像处理后,请帮助我集成两个库,因为我希望驱动GPIO。
谢谢。
答案 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_init()初始化GPIO,你很高兴。 使用GPIO可以获益。 总的来说,它结合了C和C ++文件以及CMakeLists.txt中的修改
享受!
答案 1 :(得分:1)
虽然这个话题已经超过 5 年了,但我仍然觉得有必要补充一个答案,因为我现在也一直在研究这个问题,并找到了一个替代方法。此方法不需要将bcm2835.c
文件添加到add_executable
,而是使用预编译库并链接
我在 Raspberry Pi 3 B 上运行 Ubuntu 20.04.1 LTS
设置库
bcm2835
库:wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.xx.tar.gz;
# download the latest version of the library, say bcm2835-1.xx.tar.gz, then:
tar zxvf bcm2835-1.xx.tar.gz
cd bcm2835-1.xx
./configure
make
sudo make check
sudo make install
CMakeLists.txt
文件中添加 find_library(BCM2835_LIB bcm2835)
target_link_libraries(<target name> ${BCM2835_LIB})
将库链接到目标extern "C"
部分,因为这已在库的头文件中处理。bcm2835_init()
对于构建,我做了以下事情:
mkdir build
创建构建文件夹并转到文件夹 cd build
cmake ..
以设置编译设置和环境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})