OpenCV中的位移滤波算法并混合2个图像

时间:2014-06-12 20:18:09

标签: java image opencv transparent blend

我正在尝试实现置换算法,与Gimp或photoshop中使用的算法相同。可以在此处找到此算法的描述:http://docs.gimp.org/en/plug-in-displace.html

一切都很好,非常类似于photoshop,但我有1个问题:) 我无法正确地混合2个图像(在移位后的原始图像和此图像),并且在结果图像中我有很多黑色像素。例如:

originalimage

depthmap

result

这是代码:

Mat img = Highgui.imread(path);
img.convertTo(img, CvType.CV_32SC3);

Mat map = Highgui.imread(path);
map.convertTo(map, CvType.CV_32SC3);

Mat displacedImg;

int coefficient = 15;
int displacement, intensity;
int[] dataMap = new int[3];
int[] dataImg = new int[3];
int[] dataDisplacedImg = new int[3];


Mat temp = new Mat(img.size(), img.type());

    for (int i = 0; i < img.height(); i++) {
        for (int j = 0; j < img.width(); j++) {
            map.get(i, j, dataMap);
            intensity = dataMap[0];

            displacement = (int) (((intensity - 127.5) / 127.5) *(coefficient));

            img.get(i, j, dataImg);
            if (j + displacement <= img.width() && j + displacement >= 0) {
                temp.put(i, j + displacement, dataImg);
            }
        }
    }

displacedImg = temp;

你们知道在这种情况下我能做些什么吗? 我想使用来自原始图像的像素而不是这些黑色像素。 我在考虑透明图像,但我找不到任何解决方案。

你能帮忙吗?

0 个答案:

没有答案