Loe raamatut: «Мультимедийное Программирование OpenCV»

Font:

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


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;

Vanusepiirang:
12+
Ilmumiskuupäev Litres'is:
26 juuli 2024
Kirjutamise kuupäev:
2024
Objętość:
125 lk 126 illustratsiooni
Õiguste omanik:
Автор
Allalaadimise formaat:
Tekst, helivorming on saadaval
Средний рейтинг 4 на основе 53 оценок
Tekst, helivorming on saadaval
Средний рейтинг 4,5 на основе 67 оценок
Tekst, helivorming on saadaval
Средний рейтинг 3,5 на основе 27 оценок
Tekst
Средний рейтинг 4,1 на основе 38 оценок
Tekst, helivorming on saadaval
Средний рейтинг 4,1 на основе 18 оценок
Podcast
Средний рейтинг 5 на основе 1 оценок
Tekst
Средний рейтинг 4,6 на основе 24 оценок
Tekst
Средний рейтинг 5 на основе 4 оценок