Работа над Raspberry Pi с OpenCV и BCM2835

В настоящее время я работаю над Raspberry Pi и использую модуль камеры Raspberry Pi. Я планирую использовать OpenCV для обработки изображений на RPi, и в настоящее время это не кажется большой проблемой. Однако я пытаюсь использовать библиотеку BCM2835 вместе с OpenCV и не могу ее интегрировать. Я попытался внести изменения в Makefile и добавить библиотеку bcm, а также добавить путь к библиотеке BCM, но, похоже, ничего не работает. Пожалуйста, помогите мне интегрировать обе библиотеки, так как я хочу управлять GPIO после обработки изображений на входном видео.

Спасибо.


person Dead-coder    schedule 27.06.2013    source источник


Ответы (2)


Я наконец нашел ответ на свой вопрос. Библиотеку bcm, которую можно загрузить здесь: http://www.airspayce.com/mikem/bcm2835/

разархивированы, и следующие файлы вставляются в текущую папку, в которой мы работаем, которая содержит файлы cpp. bcm2835.h bcm2835.o bcm2835.c

Я добавил bcm2835.c в add_executable файла CMakeLists.txt следующим образом: add_executable (camcv_vid2 bcm2835.c RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv_vid2.cpp)

Добавьте в программу bcm2835.h: extern C {..

включить bcm2835.h

.. }

Инициализируйте GPIO с помощью bcm2835_init () в функции main, и все готово. Используйте GPIO в своих интересах. В целом, это комбинация объединения файлов C и C ++ вместе с изменениями в CMakeLists.txt.

Наслаждаться!

person Dead-coder    schedule 09.07.2013

Несмотря на то, что теме уже более 5 лет, я все еще считаю необходимым добавить ответ, так как я тоже работал над этим сейчас и нашел альтернативный метод. Этот метод не требует добавления файла bcm2835.c в add_executable, но использует предварительно скомпилированную библиотеку и связывает ее

Я запускаю Ubuntu 20.04.1 LTS на Raspberry Pi 3 B

Настройка библиотеки

  1. Загрузите bcm2835 библиотеку, используя: wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.xx.tar.gz;
  2. Install libary using instructions on the 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, чтобы создать все целевые исполняемые файлы.

Создал cpp-файл под названием main.cpp на основе blink.c (исходный код), работал:

#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})
person Nathan    schedule 06.01.2021