在《
vb.net 教程 5-14 图像处理之内存处理基础6》一节,我们曾对比了一维数组、二维数组、指针处理、像素处理这几种方法处理图像的速度。
本节也将色彩矩阵加入进行对比,同样使用灰度均值法处理并计算耗时,前述四种图像处理方法速度的计算参看《
vb.net 教程 5-14 图像处理之内存处理基础5》
灰度均值法的计算为:
Rnew=Gnew=Bnew=(Rold+Gold+Bold)/3
拟采用的矩阵为:
主要代码如下:
Private Sub Button15_Click(sender As Object,e As EventArgs) Handles Button15.Click Dim imageAttributes As New ImageAttributes() Dim timeStart,timeEnd As DateTime Dim timeDiff As TimeSpan timeStart = Now() '灰度均值 Dim imgMatrixElement()() As Single = { New Single() {0.33,0.33,0},New Single() {0.33,New Single() {0,1,0} } Dim imgMatrix As New ColorMatrix(imgMatrixElement) imageAttributes.SetColorMatrix(imgMatrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap) Dim destImg As New Bitmap(sourceImg.Width,sourceImg.Height) Dim g As Graphics = Graphics.FromImage(destImg) g.DrawImage(sourceImg,New Rectangle(0,sourceImg.Width,sourceImg.Height),sourceImg.Height,GraphicsUnit.Pixel,imageAttributes) picDest.Image = destImg timeEnd = Now timeDiff = timeEnd - timeStart Console.WriteLine(timeDiff.TotalMilliseconds) End Sub
5次运行平均耗时:412.4948,参考之前的耗时:
说明颜色矩阵在处理速度上还是有优势,当然处理颜色的灵活度上比其他方法差点,要实际问题实际分析,看情况选用。
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看 vb.net 教程 目录