13

I'm curious to know how one can implement the effect demonstrated here using OpenCV. I think it's some sort of displacement map filter but I'm not 100% sure.

After that page has fully loaded, move the mouse around to see the background image move (it's the effect I'm looking for).

Is it possible? How would I go about doing it?

karlphillip
  • 92,053
  • 36
  • 243
  • 426

2 Answers2

22

It's been almost 2 years since I've asked this question and I think it's time to answer it: the source code that implements this filter using OpenCV can be found in my GitHub repo.

The implementation is based on the documentation of Adobe Flash DisplacementMapFilter.

There's another tutorial I recommend people to read: Psyark’s DisplacementMapFilter Tutorial. It's old but accurate.

The result:

Output

karlphillip
  • 92,053
  • 36
  • 243
  • 426
  • 1
    This is amazing! Thanks for getting back to it after so many years. It's 2017 and it's still amazing. – Mehran Dec 02 '17 at 19:31
1

Naturally, I don't know what they are using on this page. But you can get a similar effect using Parallax Mapping applied to a flat surface. In this case there is no occlusion, which makes it faster.

There is a shader implementation in this thread which should be easy enough to translate to a kernel.

Here is another link that uses this technique for photos.

rasmus
  • 3,136
  • 17
  • 22
  • Hi! I just answered this question and I though you might be interested in taking a look at my results. Have a nice day! – karlphillip Dec 19 '13 at 04:26