Jump to content
Compvision.ru
Sign in to follow this  
RinOS

Интересная функция cvRemap

Recommended Posts

Всем привет! В общем нашел такую интересную функцию cvRemap, но что то особо не понял ка она действует, хотя примерчик накатал :)

	cvNamedWindow("MyWnd", CV_WINDOW_AUTOSIZE);

cvNamedWindow("MyWnd2", CV_WINDOW_AUTOSIZE);

IplImage *src = cvLoadImage("1.jpg");

IplImage *dst = cvCreateImage(cvSize(src->width, src->height), src->depth, src->nChannels);

IplImage *mapx = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_32F, 1);

IplImage *mapy = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_32F, 1);

cvZero(mapx);

cvZero(mapy);

for (int i = 0; i < mapx->width; i++) {

for (int j = 0; j < mapx->height; j++) {

cvSetReal2D(mapx, j, i, i+sin(j));

}

}

for (int i = 0; i < mapy->width; i++) {

for (int j = 0; j < mapy->height; j++) {

cvSetReal2D(mapy, j, i, j+sin(i));

}

}

cvRemap(src, dst, mapx, mapy, CV_INTER_LINEAR, cvScalarAll(0));

cvShowImage("MyWnd", src);

cvShowImage("MyWnd2", dst);

cvWaitKey(0);

Share this post


Link to post
Share on other sites

Спасибо за примерчик :)

Функция и правда может быть довольно полезной, при создании интересных видеоэффектов.

Посмотрел доки, попробую рассказать что понял.

Назначение функции:

Каждому пикселю исходной картинки с координатами (x,y), ставится в соответствие пиксель

результирующего изображения с координатами (mapx(x,y),mapy(x,y)).

В результате получаем искривленное произвольным образом изображение или перемешанный набор пикселей.

Так как тип элемента (mapx(x,y),mapy(x,y)) - 32fC1, то

для получения значения результирующего пикселя используется интерполяция (у Вас она линейная).

Последний аргумент функции - цвет заполнения областей, которые, в результате выполненного преобразования остались

незатронутыми.

Share this post


Link to post
Share on other sites

Как можно исказить рисунок по типу фильтра liquify в фотошопе? Аффинные преобразования и перспективная трансформация дают слишком мало возможностей (или просто я не умею пользоваться). Хочется, чтобы можно было растянуть улыбку, увеличить уши, например...

Share this post


Link to post
Share on other sites
Как можно исказить рисунок по типу фильтра liquify в фотошопе? Аффинные преобразования и перспективная трансформация дают слишком мало возможностей (или просто я не умею пользоваться). Хочется, чтобы можно было растянуть улыбку, увеличить уши, например...

Можно здесь посмотреть: http://www.compvision.ru/forum/index.php?showtopic=116

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×