1. книги
  2. ГИА по информатике и ИКТ (ОГЭ, ГВЭ)
  3. Serdar Orazdurdyyev

Мультимедийное Программирование OpenCV

Serdar Orazdurdyyev (2024)
Обложка книги

Внедрение цифровой обработки изображений / Introduction of Digital Image Processing.

Оглавление

  • ***

Купить книгу

Приведённый ознакомительный фрагмент книги «Мультимедийное Программирование OpenCV» предоставлен нашим книжным партнёром — компанией ЛитРес.

Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других

Мультимедийное программирование

07.15.2019

Профессор: Orazdurdyyev Serdar Begnarlyevich

Внедрение цифровой обработки изображений / Introduction of Digital Image Processing

Выборка и квантование / Sampling and Quantization

Continuous Tone Image — Непрерывное тональное изображение

Sampled Image — Пример изображения

Sampled and Quandtized Image — Выборочное и квантованное изображение

Sampler — образец

Quantizer — Квантизатор

Аналого-цифровое преобразование / Analog to Digital Conversion

(a) Analog Signal — Аналоговый сигнал

(b) Sampling — Выборка

(c) Quantization — Квантование

(d) Coding — Кодирование

TS: Sampling Period — Период выборки

Происхождение изображения / Image Origin

Upper-left corner of image — Левый верхний угол изображения

Pixels — Пиксели

Lines — Линии

Изменение яркости изображения / Image Brightness Variation

Brightness — Яркость

Distance — Расстояние

Шаги яркости изображения / Image Brightness Steps

(a) 8 Steps: 3 bits (b) 16 Steps: 4 bits

(а) 8 шагов: 3 бита (б) 16 шагов: 4 бита

(c) 32 Steps: 5 bits (d) 64 Steps: 6 bits

(c) 32 шагов: 5 бит (d) 64 шагов: 6 бит

(e) 128 Steps: 7 bits (f) 256 Steps: 8 bits

(e) 128 шагов: 7 бит (f) 256 шагов: 8 бит

Яркость изображения Разрешение / Image Brightness Resolution

Световой спектр / Light Spectrum

WHITE LIGHT / БЕЛЫЙ СВЕТ

INFRARED / ИНФРАКРАСНЫЙ

ULTRAVIOLET / УЛЬТРАФИОЛЕТ

OPTICAL PRISM / ОПТИЧЕСКАЯ ПРИЗМА

Табличка I. Цветовой спектр, видимый при прохождении белого света через призму. (С разрешения General Electric Co., подразделения по производству ламп.) / Plate I. Color spectrum seen by passing white light a prism. (Courtesy of General Electric Co., Lamp Business Division.)

COSMIC RAYS / КОСМИЧЕСКИЕ ЛУЧИ

GAMMA RAYS / ГАММА ИЗЛУЧЕНИЕ

X-RAYS / X-ЛУЧИ

INFRARED / ИНФРАКРАСНЫЙ

MICRO-WAVES / МИКРОВОЛНЫ

RADIO / РАДИО

ELECTRIC POWER / ЭЛЕКТРОЭНЕРГИЯ

ULTRAVIOLET / УЛЬТРАФИОЛЕТ

VISIBLE SPECTRUM / ВИДИМЫЙ СПЕКТР

INFRARED / ИНФРАКРАСНЫЙ

Смеси света и пигментов / Mixtures of Light and Pigments

RGB Color — Цвет RGB

MIXTURES OF LIGHT (Additive primaries)

СМЕСИ СВЕТА (Аддитивные праймериз)

RED — КРАСНЫЙ

YELLOW — ЖЕЛТЫЙ

GREEN — ЗЕЛЕНЫЙ

CYAN — ГОЛУБОЙ

WHITE — БЕЛЫЙ

BLUE — СИНИЙ

MAGENTA — ПУРПУРНЫЙ

MIXTURES OF PIGMENTS СМЕСИ ПИГМЕНТОВ

(Subtractive primaries) (Субтрактивные праймериз)

CMY(K) Color / (CMYK) Цвет

RED — КРАСНЫЙ

YELLOW — ЖЕЛТЫЙ

GREEN — ЗЕЛЕНЫЙ

CYAN — ГОЛУБОЙ

BLACK — ЧЕРНЫЙ

BLUE — СИНИЙ

MAGENTA — ПУРПУРНЫЙ

Изображение R, G, B / R, G, B Image

Исходное изображение (Original Image) Красный компонент (Red Component)

Зеленый компонент (Green Component) Синий компонент (Blue Component)

Тип цифрового изображения / A Type of Digital Image

(а) Цветное изображение (Color Image)

(b) Изображение с уровнем серого (Gray Level Image)

(c) Двоичное изображение (Binary Image)

Тип цифрового изображения / A Type of Digital Image

(a) Двоичное изображение / Binary Image

(b) Изображение с уровнем серого / Gray Level Image

Тип цифрового изображения / A Type of Digital Image

Цветное изображение (Color Image)

2. Введение OpenCV (Introduction of OpenCV)

OpenCV?

OpenCV — библиотека компьютерного зрения с открытым исходным кодом

— Библиотека с открытым исходным кодом для обработки изображений

и компьютерного зрения

— Состоит из более чем 2500 алгоритмов

— Поддержка интерфейсов C, C++, Python, Matlab.

— Поддержка операционных систем для Windows, Linux, Android, Mac

OS и т. д.

— Быстрая реализация алгоритма с использованием инструкций MX

(MultiMedia eXtension) и SSE (потоковые расширения SIMD).

— Разработка интерфейса CUDA и OpenCL

Установка OpenCV / OpenCV Install

Условия для программирования OpenCV с использованием C ++ (для ОС Windows)

На вашем компьютере должна быть установлена 64-битная ОС Windows. (OpenCV поддерживает только 64-битные ОС)

Visual Studio 2017 должен быть установлен как инструмент редактора программ для программирования на C ++. (Последняя версия Visual Studio — 2019, но в настоящее время поддерживает только OpenCV для Visual Studio 2017.)

Установка сообщества Visual Studio 2017.

(① Visual Studio Community 2017 Install)

https://visualstudio.microsoft.com/ru/free-developer-offers/

На официальном сайте выше можно загрузить только последнюю версию 2019 года, поэтому вы можете найти версию 2017 года с помощью веб-поиска и загрузки.

30-дневная ознакомительная версия, затем зарегистрируйтесь в Microsoft, войдите в Visual Studio и продолжайте использовать ее бесплатно

Загрузка OpenCV (OpenCV Download)

http://opencv.org

> Releases

После загрузки установочного файла, дважды щелкните файл exe для установки

Add to “System Environment Path” of Windows

Зарегистрируйте место установки OpenCV в «Путь к системной среде» Windows

Если вы установили диск C следующим образом, добавьте следующее в Path

C:\OpenCV\build\x64\vc15\bin

Настройка OpenCV для Visual Studio 2017

(OpenCV Setup of Visual Studio 2017)

Проверьте, что Debug mode(режим отладки) в настоящее время включен!!!

Режим отладки → opencv_worldxxxd.lib

(Режим выпуска → opencv_worldxxx.lib)

Debug mode → opencv_worldxxxd.lib

(Release mode → opencv_worldxxx.lib)

Имя → OpenCV410_x64_v15_

отлаживать

Name → OpenCV410_x64_v15_debug

Местоположение → Папка сохранения программы OpenCV (помните!!!)

Location → OpenCV program saving folder (remember!!!)

При использовании Visual Studio в Release mode(режиме выпуска)

Запустите проект> Свойства в Main Menu

Выполните то же самое содержание на страницах с 24 по 30

Release mode → opencv_worldxxx.lib

(Режим выпуска → opencv_worldxxx.lib)

Имя → OpenCV410_x64_v15_release

Name → OpenCV410_x64_v15_release

Местоположение → Папка сохранения программы OpenCV (помните!!!)

Location → OpenCV program saving folder (remember!!!)

Пример программы OpenCV / OpenCV Sample Program

запись OpenCV Sample Program

Ввод имени программы C++… →???.cpp

C++ program name typing… →???.cpp

#include <opencv2/highgui.hpp>

пустая функция()

{

cv::Mat image(300, 400, CV_8UC1, cv::Scalar(200));

cv::imshow("Просмотр изображений", image);

резюме::waitKey (0);

}

#include <opencv2/highgui.hpp>

void main()

{

cv::Mat image(300, 400, CV_8UC1, cv::Scalar(200));

cv::imshow("Image Viewer", image);

cv::waitKey(0);

}

Ошибка → установка x64!! / Error → x64 setting!!

Ctrl+F5: запустить без отладки. / Ctrl+F5: Start without Debugging

Выход (Результат) / Output (Result)

3. OpenCV Classes

Точка_Класс / Point_ Class

Шаблонный класс (template class) для представления позиций width (ширины) и height (высоты) в двухмерных координатах (2 Dimension coordinate).

(Объявление класса Point_( Declaration of Point_ Class)

Point_<int> <==> Point2i <==> Point;

Point_<float> <==> Point2f;

Point_<double> <==> Point2d;

Бывший)

Ex)

Point_<int> pt1(100, 200);

Point_<float> pt2(92.3f, 125.23f);

Point_<double> pt3(100.2, 300.9);

Point pt4(120, 69);

Point2f pt5(0.3f, 0.f), pt6(0.f, 0.4f);

Point2d pt7(0.25, 0.6);

Размер_Класс / Size_ Class

Шаблонный класс(template class), который определяет размер изображения(image) или прямоугольника(rectangle).

Объявление класса Size_ (Declaration of Size_ Class)

Size_<int> <==> Size2i <==> Size;

Size_<float> <==> Size2f;

Size_<double> <==> Size2d;

Бывший)

Ex)

Size_<int> sz1(100, 200);

Size_<float> sz2(192.3f, 25.3f);

Size_<double> sz3(100.2, 30.9);

Size sz4(120, 69);

Size2f sz5(0.3f, 0.f);

Size2d sz6(0.25, 0.6);

Прямой_класс / Rect_ Class

класс шаблона для представления rectangle(прямоугольников)

((Начальная точка_x, Начальная точка_y), (Конечная точка_x, Конечная точка_y))

((Начальная точка_x, Начальная точка_y), Ширина, Высота)

Объявление класса Rect_ (Declaration of Rect_ Class)

Rect_<int> <==> Rect2i <==> Rect;

Rect_<float> <==> Rect2f;

Rect_<double> <==> Rect2d;

Бывший)

Ex)

Size2d sz(100.5, 60.6);

Point2f pt1(20.f, 30.f), pt2(100.f, 200.f);

Rect_<int> rect1(10, 10, 30, 50);

// column, row, width, height

Rect_<float> rect2(pt1, pt2);

Rect_<double> rect3(Point2d(20.5, 10), sz);

Век-класс / Vec Class

Шаблонный класс(template class) для вектора(Vector) чисел с небольшим количеством элементов.

Укажите data type(тип данных) и количество element(элементов) между < и >.

Vec<uchar, 2> <==> Vec2b

Vec<int, 3> <==> Vec3i

Vec<float, 4> <==> Vec4f

Vec<double, 5> <==> Vec5d

Ex)

Vec<int, 2> v1(5, 12);

Vec<double, 3> v2(40, 130.7, 125.6);

Vec2b v3(10, 10);

Vec6f v4(40.f, 230.25f, 525.6f);

Vec3i v5(200, 230, 250);

Скаляр_класс / Scalar_ Class

Укажите четыре значения в качеств data type(типа данных), чтобы указать значение яркости pixel(пикселя)

Сохраните четыре значения Blue, Green, Red, Alpha(transparency).

Установите в 0, если при инициализации (Initialization) не указано значение

Scalar_<double> <==> Scalar

Ex)

Scalar_<uchar> red(0, 0, 255);

Scalar_<int> blue(255, 0, 0);

Scalar_<double> color1(500);

Scalar_<float> color2(100.f, 200.f, 125.9f);

Мат Класс / Mat Class

Класс(class), используемый для представления image(изображения).

Mat (строки, столбцы, тип, скаляр (rows, cols, type, Scalar))

строки: размер строки (rows: row size)

столбцы: размер столбца (cols: column size)

тип: тип данных (type: data type)

Скаляр: матричное значение (Scalar: matrix value)

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

float data[] = {

1.2f, 2.3f, 3.2f,

4.5f, 5.f, 6.5f,

};

Mat m1(2, 3, CV_8U);

Mat m2(2, 3, CV_8U, Scalar(300));

Mat m3(2, 3, CV_32F, data);

Size sz(2, 3);

Mat m4(Size(2, 3), CV_64F);

Mat m5(sz, CV_32F, data);

cout <<"[m1] ="<< endl << m1 << endl;

cout <<"[m2] ="<< endl << m2 << endl;

cout <<"[m3] ="<< endl << m3 << endl << endl;

cout <<"[m4] ="<< endl << m4 << endl;

cout <<"[m5] ="<< endl << m5 << endl;

return 0;

}

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

Mat m1(4, 3, CV_32FC3);

cout << “Dimension ="<< m1.dims << endl;

cout << “Rows ="<< m1.rows << endl;

cout << “Columns ="<< m1.cols << endl << endl;

cout << “Channels ="<< m1.channels() << endl;

cout << “Data Type ="<< m1.depth() << endl;

cout << “Matrix Size ="<< m1.size() << endl << endl;

cout << “Total Data Number ="<< m1.total() << endl;

return 0;

}

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

Mat m1(2, 3, CV_8U, 2);

Mat m2(2, 3, CV_8U, Scalar(10));

Mat m3 = m1 + m2;

Mat m4 = m2 — 6;

Mat m5 = m1;

cout <<"[m2] ="<< endl << m2 << endl;

cout <<"[m3] ="<< endl << m3 << endl;

cout <<"[m4] ="<< endl << m4 << endl << endl;

cout <<"[m1] ="<< endl << m1 << endl;

cout <<"[m5] ="<< endl << m5 << endl << endl;

m5 = 100;

cout <<"[m1] ="<< endl << m1 << endl;

cout <<"[m5] ="<< endl << m5 << endl;

return 0;

}

• Копирование исходной матрицы в другую матрицу / Copy original matrix to another matrix

• Матовый клон () / Mat clone ()

• void copy To (матрица целей, матрица маски) / void copy To

(objective matrix, mask matrix)

mask matrix: Копирование только ненулевых элементов (elemen)

void convertTo (objective matrix, data type)

data type: data type, которые вы хотите изменить

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

double data[] = {

1.1, 2.2, 3.3, 4.4,

5.5, 6.6, 7.7, 8.9,

9.9, 10, 11, 12

};

Mat m1(3, 4, CV_64F, data);

Mat m2 = m1.clone(); // copy m1 to m2

Mat m3, m4;

m1.copyTo(m3); // copy m1 to m3

m1.convertTo(m4, CV_8U); // copy m1 to m4 converting to uchar

cout <<"[m1] =\n"<< m1 << endl;

cout <<"[m2] =\n"<< m2 << endl;

cout <<"[m3] =\n"<< m3 << endl;

cout <<"[m4] =\n"<< m4 << endl;

return 0;

}

векторный класс / vector Class

Контейнер последовательностей(Sequence Container) C++ STL(Standard Template Library)

доступ к элементу(element access) вектора(vector): используйте оператор индекса(subscript operator), [], как массив(array)

vector(): конструктор(constructor)

void push_back(): добавляет элемент в конец vector

void pop_back(): удалить последний элемент

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

vector<Point> v1;

v1.push_back(Point(10, 20));

v1.push_back(Point(20, 30));

v1.push_back(Point(50, 60));

vector<float> v2(3, 9.25);

Size arr_size[] = { Size(2, 2), Size(3, 3), Size(4, 4) };

int arr_int[] = { 10, 20, 30, 40, 50 };

vector<Size> v3(arr_size, arr_size + sizeof(arr_size) / sizeof(Size));

vector<int> v4(arr_int + 2, arr_int + sizeof(arr_int) / sizeof(int));

cout <<"[v1]"<< ((Mat)v1) << endl << endl;

cout <<"[v2]"<< ((Mat)v2) << endl << endl;

cout <<"[v2]"<< ((Mat)v2).reshape(1, 1) << endl;

cout <<"[v3]"<< ((Mat)v3).reshape(1, 1) << endl;

cout <<"[v4]"<< ((Mat)v4).reshape(1, 1) << endl;

return 0;

}

Класс диапазона / Range class

Используется в основном для указания диапазона row(строк) и column(столбцов) в классе Mat.

Range(int start, int end)

start(начало) в диапазоне, end(конец) не в диапазоне

Функция операции с матрицей / Matrix Operation Function

Matexp inv(метод): расчет обратной матрицы

— метод

Matexp inv(method): inverse matrix calculation

— method

Matexp mul (input matrix): Выполнить поэлементное (element-wise) умножение двух матриц

Matexp t (): вычислить транспонированную матрицу(transposed matrix)

Одновременные уравнения (simultaneous equation)

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

float data[] = {

1, 0, 2,

— 3, 2, 6,

— 1, — 2, 3

};

float ans[] = {6, 30, 8};

Mat m1(3, 3, CV_32F, data);

Mat m2(1, 3, CV_32F, ans);

Mat m2_t = m2.t();

Mat m1_inv = m1.inv(DECOMP_LU);

Mat x = m1_inv * m2_t;

cout <<"[m1] ="<< endl << m1 << endl;

cout <<"[m1_inv] ="<< endl << m1_inv << endl << endl;

cout <<"[m2(transposed)] ="<< endl << m2_t << endl << endl;

cout << “solution x1, x2, x3 ="<< x.t() << endl;

}

насыщенный_ бросок < > / saturate_cast < >

image data는 основном представляют собой кодированные(encoding) данные с 8 битами на канал.

Поскольку он использует только 8bit, он имеет ограниченный диапазон значений пикселей (0 ~ 255).

saturate_cast() template method: Когда значение сохраняется в 8-битном, если оно превышает 8-битный диапазон, оно сохраняется как 0 или 255

Ex)

Mat m1(2, 2, CV_8U);

m1(0, 0) = — 50; // — > 206

m1(0, 1) = 300; // — > 44

m1(1, 0) = saturate_cast<uchar>(-50);

m1(1, 1) = saturate_cast<uchar>(300);

4. Пользовательские интерфейсы OpenCV

(OpenCV User Interfaces)

Контрольние виндов / Window Control

Named Window (winname, flags): Устанавливает имя window и создает window с этим именем

flags: Изменение размера window

imshow (): отображает матрицу"mat"как окно в окне winname

destroyWindow (): удаляет указанное окно с экрана

destroyAllWindows (): удалить все видимые окна

moveWindow (x, y): переместить окно winname в указанную позицию (x (столбец, y (строка))

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

Mat image1(300, 400, CV_8U, Scalar(255));

Mat image2(300, 400, CV_8U, Scalar(100));

string title1 ="white window control";

string title2 ="gray window control";

namedWindow(title1, WINDOW_AUTOSIZE);

namedWindow(title2, WINDOW_NORMAL);

moveWindow(title1, 100, 200);

moveWindow(title2, 300, 200);

imshow(title1, image1);

imshow(title2, image2);

waitKey();

destroyAllWindows();

return 0;

}

Контрольние событиями клавиатуры / Keyboard Event Control

waitKey (delay, задержка): ожидает ввода ключа в течение времени задержки(delay), возвращает(return) значение клавиши, когда происходит событие клавиши,

delay: время задержки. ms.

delay <= 0: Бесконечное ожидание, пока не произойдет ключевое событие

delay > 0: дождитесь ввода ключа в течение времени задержки. return (Возвращает) — 1, если в течение времени задержки нет клавишного ввода

Используйте waitKeyEx () для ввода клавиши со стрелкой (arrow key)

Event (Событие) происходит только когда window active (активно).

Контрольние событиями мыши / Mouse Event Control

Создать callback function (функцию обратного вызова) (event handler) (обработчик событий) для обработки событий мыши и зарегистрировать эту функцию в системе через setMouseCallback ()

Конец ознакомительного фрагмента.

Оглавление

  • ***

Купить книгу

Приведённый ознакомительный фрагмент книги «Мультимедийное Программирование OpenCV» предоставлен нашим книжным партнёром — компанией ЛитРес.

Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других

Вам также может быть интересно

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я