我拼接了两张图片,但在最终图片中有一条可见的接缝。我正在尝试使用 Alpha 混合 来移除该接缝。我知道使用 cvAddweight()
函数应用 Alpha 混合,但在此函数参数是两个图像,alpha, beta , gamma 和目标。我正在服用 gamma=0
、alpha=0.6
、beta=0.4
。我代码的最后一部分是我的两个输入源图像和目标图像是什么->
IplImage* WarpImg = cvCreateImage
(cvSize(T1Img->width*2, T1Img->height*2), T1Img->depth, T1Img- >nChannels);
cvWarpPerspective(T1Img, WarpImg, &mxH);
cvSetImageROI(WarpImg, cvRect(0, 0, T2Img->width, T2Img->height));
cvCopy(T2Img, WarpImg);
cvResetImageROI(WarpImg);
cvNamedWindow("WarpImg Img",1);
cvShowImage("WarpImg Img", WarpImg);
cvSaveImage("save.jpg",WarpImg);
我的最终图像是
最佳答案
我必须承认,我不认为 alpha 混合是您的答案。由于照明/曝光的差异,似乎存在。 Alpha 混合本质上是一种通过对两个图像的颜色进行加权平均来使一个图像透过另一个图像可见的方法。您的右侧和左侧图像以黑色为后盾。如果您只是简单地进行 alpha 混合,那么您实际上是在用黑色背景对图像进行加权。由此产生的效果只会使两个图像变暗。
2 个潜在的其他方法可能是在外观上查看两个图像的平均颜色,并将一个图像向上或向下调整 50% 的亮度差异,另一个与另一个相反的 50%(一个向上或向下调整)另一个向下和 50% 使得整体亮度跳跃只有 50% 的差异)。
另一个可能会使用更复杂的图像直方图技术,您尝试将一侧图像的直方图扩大或缩小到另一侧并对齐它们,然后通过新直方图。
关于visual-c++ - 阿尔法混合去除图像中的接缝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801851/