图1(png)
图2(png)
合并后效果
代码为按钮事件下的代码,显示方式是通过pictureBox显示
// 读取两张图片
Mat img1 = Cv2.ImRead("D:/imgaeTest/Left_5.png", ImreadModes.Unchanged);
Mat img2 = Cv2.ImRead("D:/imgaeTest/Left_3.png", ImreadModes.Unchanged);
// 确保两张图片的大小和类型都相同
if (img1.Size() != img2.Size() || img1.Type() != img2.Type())
{
throw new Exception("Images must have the same size and type.");
}
// 创建一个新的图片用于存储结果
Mat result = img1.Clone();
// 创建一个mask,只有当img2的alpha通道大于0时,mask对应的位置为255
Mat mask = new Mat(img2.Size(), MatType.CV_8UC1);
if (img2.Channels() == 4) // 检查图像是否包含alpha通道
{
Cv2.InRange(img2.Split()[3], 1, 255, mask);
}
else
{
//Cv2.InRange(img2, 1, 255, mask);
Cv2.InRange(img2, 1, 250, mask); //注意此处是250
}
// 将img2的不透明区域复制到result上
img2.CopyTo(result, mask);
// 保存结果
//Cv2.ImWrite("result.png", result);
pictureBox1.Invoke((System.Action)delegate () { pictureBox1.Image = BitmapConverter.ToBitmap(result); });