RaspberryPi+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

Windows live 2012 offline installer

На сайте Microsoft убрали возможность скачать русскоязычный полный пакет Windows Live 2012. Теперь там можно скачать лишь англоязычную версию. Однако, скачанная ранее русскоязычная версия все еще работоспособна. Скачать Windows live 2012 offline installer rus