vm 自带的【图像拼接】算子不能满足需求,比如拼接的方向,或者一种全局变量的状态。所以只能在脚本模块里写 C# 去实现了,一开始想用 OpenCV 的 hconcat 函数,结果总在这个函数报错,我有点惧怕或者懒惰按照文档提醒的方式打断点找问题……
说到底,图片本质上就是一个字节矩阵或者数组嘛,琢磨了一下对应关系,这个函数手写没问题的。
函数的输入输出都是 ImageData 类型。
public ImageData MergeImagesHorizontally(ImageData leftIm, ImageData rightIm)
{
// 默认两张照片高度一致
int bytesPerPixel = (leftIm.PixelFormat == ImagePixelFormate.MONO8) ? 1 : 3;
byte[] buffer = new Byte[(leftIm.Width + rightIm.Width) * leftIm.Height * bytesPerPixel];
// 每次复制一行过去
for (int h = 0; h < leftIm.Height; h += 1){
Array.Copy(leftIm.Buffer,
h * leftIm.Width * bytesPerPixel,
buffer,
h * (leftIm.Width + rightIm.Width) * bytesPerPixel,
leftIm.Width * bytesPerPixel);
Array.Copy(rightIm.Buffer,
h * rightIm.Width * bytesPerPixel,
buffer,
((leftIm.Width + rightIm.Width) * h + leftIm.Width) * bytesPerPixel,
rightIm.Width * bytesPerPixel);
}
ImageData outIm = new ImageData();
outIm.Buffer = buffer;
outIm.Width = leftIm.Width + rightIm.Width;
outIm.Height = leftIm.Height;
outIm.PixelFormat = leftIm.PixelFormat;
return outIm;
}
另,封面图片为动漫《物语》截图