Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемВероника Феоктистова
1 Компьютерная обработка изображений Лекция 4 Кафедра П и КО СПбГУ ИТМО 2005
2 Создание изображений в библиотеке IPL // создание заголовочного описания изображения IplImage* img = iplCreateImageHeader( 1, // одноканальное изображение 0, // нет alpha-канала IPL_DEPTH_16U, // данные типа unsigned short "GRAY", // цветовая модель "GRAY", // последовательность каналов IPL_DATA_ORDER_PIXEL, // способ выравнивания данных IPL_ORIGIN_TL, // начало координат в верхнем левом углу IPL_ALIGN_DWORD, // 4-байтовое выравнивание данных width, height, // ширина и высота изображения NULL, NULL, // не используется ROI, нет маски ROI NULL, NULL); // ID не используется, нет разбиения // размещение изображения без заполнения значениями iplAllocateImage( img, // изображение 0, // флаг заполнения значениями 0 ); // значение для заполнения … // освобождение памяти выделенной для изображения iplDeallocate( img, // изображение IPL_IMAGE_ALL ); // вся информация об изображении
3 Создание изображения в программе // коэффициент уровня интенсивности int const factor = / (width + height); // указатель на массив данных unsigned short* p = (unsigned short*) img->imageData; // обход изображения по строкам for( int y=0; y
4 Создание тестового изображения // создание одноканального изображения Jaehne IplImage* img = iplCreateImageJaehne( IPL_DEPTH_8U, 200, 150 );... // освобождение памяти выделенной для изображения iplDeallocate( img, IPL_IMAGE_ALL );
5 Создание изображения из формата BMP // чтение формата BMP BITMAPINFOHEADER* bmphdr;... // создание заголовочного описания изображения IplImage* img = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, bmphdr->biWidth, bmphdr->biHeight, NULL, NULL, NULL, NULL); // преобразование DIB в изображение IPL iplConvertFromDIB( bmphdr, img );... // освобождение памяти выделенной для изображения iplDeallocate( img, IPL_IMAGE_ALL ); biWidth, bmphdr->biHeight, NULL, NULL, NULL, NULL); // преобразование DIB в изображение IPL iplConvertFromDIB( bmphdr, img );... // освобождение памяти выделенной для изображения iplDeallocate( img, IPL_IMAGE_ALL );">
6 Функции для геометрических преобразований iplZoom - растягивает или увеличивает изображение iplDecimate - сжимает или уменьшает изображение iplResize - изменяет размеры изображения iplDecimateBlur - уменьшает и размывает изображение
7 Действие функции iplZoom xDst=2 xSrc=1 yDst=2 ySrc=1 void iplZoom(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // увеличивает изображение
8 Действие функции iplDecimate void iplDecimate(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // уменьшает изображение xDst=1 xSrc=2 yDst=1 ySrc=2
9 Действие функции iplResize void iplResize(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // изменяет размеры изображения xDst=3 xSrc=2 yDst=2 ySrc=3
10 Выбор режима интерполяции IPL_INTER_NNIPL_INTER_LINEARIPL_INTER_CUBIC
11 Действие функции iplDecimateBlur void iplDecimateBlur(IplImage* srcImage, IplImage* dstImage, int xDst, int xSrc, int yDst, int ySrc, int interpolate); // уменьшает изображение с размытием iplDecimate iplDecimateBlur
12 Макросы для геометрических преобразований iplZoomFit(srcImage, dstImage, interpolate) - растягивает или увеличивает изображение iplDecimateFit(srcImage, dstImage, interpolate) - сжимает или уменьшает изображение iplResizeFit(srcImage, dstImage, interpolate) - изменяет размеры изображения
13 Функции для геометрических преобразований void ipl...(IplImage* srcImage, // исходное изображение IplImage* dstImage, // итоговое изображение int xDst, int xSrc, // масштаб по х итогового и исходного int yDst, int ySrc, // масштаб по y итогового и исходного int interpolate); // режим интерполирования
14 Порядок действий 1. Создать временное изображение требуемого размера. 2. Выполнить преобразование исходного изображения и записать результат во временное изображение. 3. Удалить исходное изображение. 4. Скопировать временное изображение на место исходного. 5. Удалить временное изображение.
wi" title="Пример программы void ZoomImage(IplImage* img, double scale) { // Создать временное изображения с измененным размером IplImage* tmp = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, img->wi" class="link_thumb"> 15 Пример программы void ZoomImage(IplImage* img, double scale) { // Создать временное изображения с измененным размером IplImage* tmp = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, img->width*scale, img->height*scale, NULL, NULL, NULL, NULL); // Занять память под временное изображение iplAllocateImage(tmp, 0, 0); if(scale > 1.) // Выполнить увеличение изображения iplZoomFit(img, tmp, IPL_INTER_LINEAR); else // Выполнить уменьшение изображения iplDecimateFit(img, tmp, IPL_INTER_LINEAR); // Освободить память исходного изображения iplDeallocate(img, IPL_IMAGE_ALL); // Скопировать результат в исходное изображение img=iplCloneImage(tmp); // Освободить память временного изображения iplDeallocate(tmp, IPL_IMAGE_ALL); } wi"> width*scale, img->height*scale, NULL, NULL, NULL, NULL); // Занять память под временное изображение iplAllocateImage(tmp, 0, 0); if(scale > 1.) // Выполнить увеличение изображения iplZoomFit(img, tmp, IPL_INTER_LINEAR); else // Выполнить уменьшение изображения iplDecimateFit(img, tmp, IPL_INTER_LINEAR); // Освободить память исходного изображения iplDeallocate(img, IPL_IMAGE_ALL); // Скопировать результат в исходное изображение img=iplCloneImage(tmp); // Освободить память временного изображения iplDeallocate(tmp, IPL_IMAGE_ALL); }"> wi" title="Пример программы void ZoomImage(IplImage* img, double scale) { // Создать временное изображения с измененным размером IplImage* tmp = iplCreateImageHeader(3, 0, IPL_DEPTH_8U, "RGB", "BGR", IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_BL, IPL_ALIGN_DWORD, img->wi">
16 Действие функции iplMirror void iplMirror(IplImage* srcImage, IplImage* dstImage, int flipAxis); // осуществляет зеркальные отображения flipAxis=0flipAxis=1flipAxis=-1
17 Действие функции iplRotate void iplRotate(IplImage* srcImage, IplImage* dstImage, double angle, double xShift, double yShift, int interpolate); // осуществляет поворот изображения angle=45 angle=-45
18 Действие функции iplRotate angle=45 xShift=srcImage->width/2 y Shift=srcImage->height/2 void iplRotate(IplImage* srcImage, IplImage* dstImage, double angle, double xShift, double yShift, int interpolate); // осуществляет поворот изображения
19 Действие макроса iplRotateCenter angle=45 xCenter=srcImage->width/2 yCenter=srcImage->height/2 void iplRotateCenter(IplImage* srcImage, IplImage* dstImage, double angle, double xCenter, double yCenter, int interpolate); // осуществляет поворот изображения
height, img-" title="Пример программы 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-" class="link_thumb"> 20 Пример программы 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 ); } height, 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 ); }"> height, img-" title="Пример программы 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-">
21 Действие программы iplRotateCW
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.