C#使用NetVips实现大批量图片的拼接输出

一、NetVips介绍

NetVips是对图像处理库libvips的.Net的绑定,或者说封装。具有约300种运算,涵盖算术,直方图,卷积,形态运算,频率滤波,颜色,重采样,统计等;它支持各种图像格式,包括JPEG,TIFF,OME-TIFF,PNG,WebP,FITS,Matlab,OpenEXR,PDF,SVG,HDR,PPM,CSV,GIF,Analyze,DeepZoom和OpenSlide。

以上是官网介绍(官网地址:https://kleisauke.github.io/net-vips/index.html),下面是我个人的理解:
首先是优点:
1, 轻量级,易上手,安装部署简单;
2, 占内存小,相比于Bitmap那丧心病狂的内存占用量,netvips在内存优化方面确实相当优秀。
至于缺点,主要就是计算能力不是特别优秀,肯定不如opencv这样的库专业。

综上,选择netvips主要就是看重了它的性能,十分适合大量图片的处理。

二、安装部署

nuget搜索NetVips,安装下面3个包即可。
NetVips
NetVips.Native.win-x64
NetVips.Native.win-x86

三、拼接图片输出

		/// 
		/// 图像拼接
		/// 
		/// 输出图像宽度
		/// 输出图像高度
		/// 拼接列数
		/// 拼接图像总数
		/// 图像名(编号从0-N)
		private static Image outimg = null;//输出图像
		private void JoinPicture(int width,int height, int col,int tol, string picname)
        {
            int x ;//x轴位置
            int y;//y轴位置
            int picid =Convert.ToInt32( picname.Split('\\')[picname.Split('\\').Length - 1].Split('.')[0]);//获取图像编号,用来计算图像位置
            x = picid % col;
            y= picid / col;
            Image im= Image.NewFromFile(picname).Embed(x* im.Width, y * im.Height, width, height, extend: Enums.Extend.Background);//嵌入图像到指定宽高
            if(picid==0)
            {
                outimg = im;//先给outimg赋值
            }
            else
            {
                outimg += im;//进行加运算
            };
            if (picid == tol-1)
            {
                outimg.WriteToFile(picname.Replace(picname.Split('\\')[picname.Split('\\').Length - 1],"output.jpg"));//输出拼接好的图片到指定目录
            }
            else
            {
                return;
            }
		}

主要思路就是利用嵌入函数Embed把图片嵌入到一个指定宽高的背景下的相应位置,然后再逐个相加得到一张完整的大图。
关于上面用到的函数,具体参数指代请参考官网api(官网地址见一)。

四、总结

因为项目需求,最近接触了几个图片处理的库,实验下来这个netvips是最符合我需求的。因为时间有限我也没有深入去看源码和demo,只是从官网api上学习了一下,写了一个简单的小方法,如有不足还请指正。欢迎大家交流,共同进步。

你可能感兴趣的:(NetVips,图像拼接,C#)