русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Повороты изображений


Дата добавления: 2014-02-04; просмотров: 845; Нарушение авторских прав


Для выполнения поворота изображения можно воспользоваться функцией iplRotate библиотеки IPL, которая имеет следующий прототип:

void iplRotate(IplImage* srcImage, IplImage* dstImage, double angle, double xShift, double yShift, int interpolate);

Как обычно, первые два аргумента этой функции являются указателями на изображения:
IplImage* srcImage; // указатель на исходное изображение
IplImage* dstImage; // указатель на изображение, в котором функция должна сохранить результат

Третий вещественный аргумент angle определяет угол поворота изображения в градусах. Положительное значение аргумента angle соответствует повороту по часовой стрелке, а отрицательное – против часовой стрелки. Поворот изображения осуществляется вокруг угла изображения с координатами (0,0). Результаты поворота изображения на 45 градусов по часовой и против часовой стрелки представлены на рисунке 1.

iplRotate angle=45 angle=-45

Рис. 1. Действие функции iplRotate

Вещественные аргументы xShift и yShift определяют величины сдвига вдоль осей x и y после выполнения поворота. Результат поворота с последующим сдвигом представлен на рисунке 2.

iplRotate

Рис. 2. Действие функции iplRotate с аргументами angle=45, xShift=srcImage->width/2 и yShift=srcImage->height/2

Если поворот изображения должен быть осуществлен вокруг точки с произвольными координатами (x, y), а не вокруг точки (0,0), то необходимо сначала вычислить величины сдвига, а затем вызвать функцию iplRotate. Величину сдвигов можно вычислить с помощью специальной функции iplGetRotateShift, которая имеет следующий прототип:

void iplGetRotateShift(double xCenter, double yCenter, double angle, double* xShift, double* yShift);

где xCenter и yCenter координаты точки, вокруг которой осуществляется поворот, angle – угол поворота, а xShift и yShift – указатели на переменные, которым должны быть присвоены значения вычисленных необходимых сдвигов.



Для поворота изображения вокруг точки с произвольными координатами гораздо удобнее воспользоваться макроопределением iplRotateCenter, которое имеет следующий прототип:

void iplRotateCenter(IplImage* srcImage, IplImage* dstImage, double angle, double xCenter, double yCenter, int interpolate);

где xCenter и yCenter – координаты точки, вокруг которой будет осуществляться вращение. Результат поворота изображения вокруг его центра представлен на рисунке:

iplRotateCenter

Рис. 3. Действие макроопределения iplRotateCenter с аргументами angle=45, xCenter=srcImage->width/2 и yCenter=srcImage->height/2

Последний целочисленный аргумент interpolate функции iplRotate и макроопределения iplRotateCenter так же как и в функциях изменения размеров изображений определяет режим интерполирования. Перечисленные выше значения этого аргумента в функциях поворота могут комбинироваться в режиме побитового ИЛИ (|) комбинироваться с константой IPL_SMOOTH_EDGE, в результате чего края повернутого изображения будут сглаживаться.

Поворот прямоугольного изображения, выполняемый по месту, требует изменения его размеров. В приведенном примере функция RotateImageCW осуществляет поворот изображения по часовой стрелке на 90° (Рис. 4).

void RotateImageCW(IplImage* img){// Создать временное изображение с измененным размером IplImage* tmp = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, img->height, img->width, NULL, NULL, NULL, NULL); // Занять память под временное изображение iplAllocateImage(tmp, 0, 0); // Выполнить поворот с последующим сдвигом iplRotate(img, tmp, 90, 0, img->width-1, IPL_INTER_LINEAR); // Освободить память исходного изображения iplDeallocate(img, IPL_IMAGE_ALL); // Скопировать результат в исходное изображение img = iplCloneImage(tmp); // Освободить память временного изображения iplDeallocate(tmp, IPL_IMAGE_ALL);}
RotateImageCW

Рис. 4. Действие функции RotateImageCW

Функция для поворота на 90° против часовой стрелки RotateImageCСW может быть реализована аналогично. Аргументы angle, xShift и yShift должны иметь следующие значения: angle=-90, xShift=img->height-1 и yShift=0.

 



<== предыдущая лекция | следующая лекция ==>
Зеркальные отражения изображений | Бинаризация


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.687 сек.