0
Emgu.CV(Nuget包2.4.2)並不像我可以告訴實現OpenCV中可用的gpu :: alphaComp方法。使用emgu.cv的Alpha複合圖像
因此,當試圖實現這種特定類型的組合時,它在C#中的速度令人難以置信,因此它佔用了我應用程序總CPU使用量的80%。
這是我的原始解決方案,表現非常糟糕。
static public Image<Bgra, Byte> Overlay(Image<Bgra, Byte> image1, Image<Bgra, Byte> image2)
{
Image<Bgra, Byte> result = image1.Copy();
Image<Bgra, Byte> src = image2;
Image<Bgra, Byte> dst = image1;
int rows = result.Rows;
int cols = result.Cols;
for (int y = 0; y < rows; ++y)
{
for (int x = 0; x < cols; ++x)
{
// http://en.wikipedia.org/wiki/Alpha_compositing
double srcA = 1.0/255 * src.Data[y, x, 3];
double dstA = 1.0/255 * dst.Data[y, x, 3];
double outA = (srcA + (dstA - dstA * srcA));
result.Data[y, x, 0] = (Byte)(((src.Data[y, x, 0] * srcA) + (dst.Data[y, x, 0] * (1 - srcA)))/outA); // Blue
result.Data[y, x, 1] = (Byte)(((src.Data[y, x, 1] * srcA) + (dst.Data[y, x, 1] * (1 - srcA)))/outA); // Green
result.Data[y, x, 2] = (Byte)(((src.Data[y, x, 2] * srcA) + (dst.Data[y, x, 2] * (1 - srcA)))/outA); // Red
result.Data[y, x, 3] = (Byte)(outA*255);
}
}
return result;
}
有沒有辦法在C#中優化以上內容?
我另外看過使用OpencvSharp,但似乎並沒有提供對gpu :: alphaComp的訪問。
是否有任何OpenCV C#包裝庫可以做alpha合成?
AddWeighted不會做我需要做的事情。
雖然相似,這question沒有提供答案