RapberryPi+OpenCV+Code:Blocks

Устанавливаем на карту памяти Raspbian.
Для этого в Windows:

  1. скачиваем Raspbian https://www.raspberrypi.org/downloads/ и разархивируем его
  2. скачиваем и устанавливаем Etcher https://etcher.io
  3. записываем при помощи Etcher образ на карту памяти
  4. загружаемся в ОС, подключаем RaspberryPi к интернету, обновляем ОС до актуального состояния:
    • apt-get update
    • apt-get upgrade
  5. настраиваем RaspberryPi raspi-config
    • Interfacing Options -> Camera
    • Overclock -> Modest
    • Advanced Options -> Expand Filesystem
    • перезагружаемся и проверяем, что файловая система расширена на весь объем карты памяти df -h
  6. выключаем RaspberryPi, подключаем камеру, включаем питание, проверяем работоспособность и правильность подключения камеры raspistill -o cam.jpg и vcgencmd get_camera
  7. устанавливаем необходимые пакеты apt-get install build-essential cmake pkg-config
  8. устанавливаем библиотеки OpenCV apt-get install libopencv-dev
  9. устанавливаем Code:Blocks apt-get install codeblocks
  10. запускаем и настраиваем Code:Blocks
    • Project -> Build options -> Compiler settings -> Compiler Flags -> C++11 + O3
    • Linker settings -> Link libraries -> Add (/usr/lib/arm-linux-gnueabihf/)
    • узнать расположение библиотек в системе можно выполнив pkg-config --libs opencv или find / -name "libopencv*"
    • наличие пакетов в системе поможет проверить apt search
  11. переводим камеру в режим трансляции modprobe bcm2835-v4l2
  12. возможно придется сделать mknod /dev/video0 c 81 0
  13. проверить корректность распознавания камеры можно при помощи v4l2-ctl --list-devices, а вывести возможные режимы работы камеры поможет v4l2-ctl --list-formats
  14. убеждаемся в работоспособности связки:
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    int main()
    {
    cv::VideoCapture cap(0);
    if (!cap.isOpened()) return 1;
    cv::Mat frame;
    cv::namedWindow("win",1);
    while (cvWaitKey(10)!=32)
    {
    cap >> frame;
    cv::imshow("win", frame);
    }
    return 0;
    }

Запуск браузера IE из командной строки

Запуск с переходом на конкретный сайт
"C:\Program Files\Internet Explorer\iexplore.exe" i-do.pro
Запуск с переходом в поисковую систему по умолчанию
"C:\Program Files\Internet Explorer\iexplore.exe" i-do.pro автоматизация рутинных задач
Параметры запуска:
Запуск Internet Explorer с помощью технологии OLE
-embedding
Запуск браузера, отключив все надстройки
-extoff
Запуск браузера в режиме «Kiosk mode»
-k
Запуск браузера в режиме InPrivate
-private

Аппроксимация функции по экспериментальным данным

Для приближенного восстановления графика функциональной зависимости по известным экспериментальным данным обычно решают системы уравнений. Как это делается, можно узнать из отличного материала с факультета физики РГПУ имени Герцена. Однако зачастую желание побыстрее получить результат перевешивает пользу самостоятельного решения. В таких ситуациях можно прибегнуть к функционалу WolframAlpha или онлайн-сервисов типа МНК и регрессионный анализ Онлайн + графики.

Генерация новых случайных чисел с каждым перезапуском программы

Не секрет, что если для генерации числовых данных использовать функцию rand, то при перезапуске программы мы будем постоянно получать одни и те же сгенерированные псевдослучайные числа. В большинстве «больших» сред программирования, типа C++ Builder, Visual Studio, есть возможность включить опцию в настройках и избавиться от подобного эффекта. Однако, в Dev C++ такой опции нет.
Можно воспользоваться таким кодом:


#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
	srand(time(NULL));
	int a=rand();
	cout << a;
	return 0;
}

В данном случае srand(time(NULL)) позволяет генерировать значения с привязкой ко времени исполнения.

Типы данных C++

Тип Диапазон значений Размер (байт)
bool true и false 1
signed char -128 … 127 1
unsigned char 0 … 255 1
signed short int -32 768 … 32 767 2
unsigned short int 0 … 65 535 2
int -2 147 483 648 … 2 147 483 647 4
signed long int -2 147 483 648 … 2 147 483 647 4
unsigned long int 0 … 4 294 967 295 4
float 3.4e-38 … 3.4e+38 4
double 1.7e-308 … 1.7e+308 8
long double 3.4e-4932 … 3.4e+4932 10

Реализация sign на C++

Sign позволяет определить знак числа.
sgn(x), при x>0 возвращает 1, при x<0 возвращает −1, при x=0 возвращает 0. Данная функция полезна в робототехнике при граничных переходах.
template short int sgn(T val) {
return (T(0) < val) − (val < T(0));
}
основа взята со stackoverflow.com