Очень часто при работе с изображениями требуется изменить их размер (уменьшить или увеличить).
В OpenCV это реализуется функцией cvResize()
Программа загружает изображение, затем в цикле создаёт 4 изображения, с размерами в 3 раза меньше (разумеется можно задать любой другой размер), чем у исходного и сразу же выполняет cvResize() с разным типом интерполяции.
//
// изменение размеров изображения
// при помощи cvResize()
//
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
// исходная
IplImage* image = 0;
IplImage* dst[4];
int main(int argc, char* argv[])
{
// имя картинки задаётся первым параметром
char* filename = argc >= 2 ? argv[1] : "Image0.jpg";
// получаем картинку
image = cvLoadImage(filename,1);
int i=0;
printf("[i] image: %s\n", filename);
assert( image != 0 );
// создание уменьшенных картинок (разный тип интерполяции)
for(i=0;i<4; i++){
dst[i] = cvCreateImage( cvSize(image->width/3, image->height/3), image->depth, image->nChannels );
cvResize(image, dst[i], i);
}
// окно для отображения картинки
cvNamedWindow("original",CV_WINDOW_AUTOSIZE);
cvShowImage("original",image);
// показываем результат
char buf[128];
for(i=0;i<4; i++){
cvNamedWindow( itoa(i, buf, 10) ,CV_WINDOW_AUTOSIZE);
cvShowImage(itoa(i, buf, 10), dst[i]);
}
// ждём нажатия клавиши
cvWaitKey(0);
// освобождаем ресурсы
cvReleaseImage(&image);
for(i=0;i<4; i++){
cvReleaseImage(&dst[i]);
}
// удаляем окна
cvDestroyAllWindows();
return 0;
}
— изменение размеров(масштабирование) изображения
src — исходное изображение
dst — изображение для сохранения результа
interpolation — метод интерполяции:
Здравствуйте! Помогите пожалуйста решить следующую задачу, есть исходная картинка, нужно получить картинку чтобы вокруг исходной добавить 10 px по ширине и высоте и фон был белый… у исходной так же фон белый…
вот это вроде как наоборот написано #define CV_INTER_CUBIC 2 //
#define CV_INTER_AREA 3 // бикубическая интерполяция
в Learning Opencv вот так написано хотя и по названию понятно… просто автор сильно спешил CV_INTER_AREA Pixel area re-sampling
CV_INTER_CUBIC Bicubic interpolation
и вот еще
We can also virtually place the new resized pixel over the old pixels and then average the covered pixel values, as done with CV_INTER_AREA.
At least that’s what happens when cvResize() shrinks an image. When it expands an image, CV_INTER_AREA amounts to the same thing as CV_INTER_NN.
Комментарии (10)
RSS свернуть / развернутьtipabot
Altivolus
картинка — это
noonv
zobnin
noonv
zobnin
Почему не освобождаются ресурсы изображений dst[0]-dst[3]?
DestinyR
noonv
#define CV_INTER_CUBIC 2 //
#define CV_INTER_AREA 3 // бикубическая интерполяция
в Learning Opencv вот так написано хотя и по названию понятно… просто автор сильно спешил
CV_INTER_AREA Pixel area re-sampling
CV_INTER_CUBIC Bicubic interpolation
и вот еще
We can also virtually place the new resized pixel over the old pixels and then average the covered pixel values, as done with CV_INTER_AREA.
At least that’s what happens when cvResize() shrinks an image. When it expands an image, CV_INTER_AREA amounts to the same thing as CV_INTER_NN.
jacknk88
то можете попробовать вот так
modikon35
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.