我正在尝试实现置换算法,与Gimp或photoshop中使用的算法相同。可以在此处找到此算法的描述:http://docs.gimp.org/en/plug-in-displace.html
一切都很好,非常类似于photoshop,但我有1个问题:) 我无法正确地混合2个图像(在移位后的原始图像和此图像),并且在结果图像中我有很多黑色像素。例如:
这是代码:
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;
你们知道在这种情况下我能做些什么吗? 我想使用来自原始图像的像素而不是这些黑色像素。 我在考虑透明图像,但我找不到任何解决方案。
你能帮忙吗?