Foxtable(狐表)用户栏目专家坐堂 → [分享]图片去除灰底、锐化、柔化、图片无损压缩、任意位置添加水印等等


  共有53184人关注过本帖平板打印复制链接

主题:[分享]图片去除灰底、锐化、柔化、图片无损压缩、任意位置添加水印等等

帅哥哟,离线,有人找我吗?
黄训良
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
[分享]图片去除灰底、锐化、柔化、图片无损压缩、任意位置添加水印等等  发帖心情 Post By:2017/5/27 16:57:00 [只看该作者]

最近需要对图片文件进行电子化,各个单位的高拍仪像素参差不齐,灰底图片、不清晰图片太多,为了提高电子化后图像的清晰度,采用了开源AForge.Net库来处理图像。
一是AForge.Net代码简单,核心代码只需要2、3行。
二是效率高,以Laplacian(拉普拉斯)算子对图片进行锐化处理为例,3M图片,下面的VB.Net代码锐化结束需要10秒以上,AForge.Net只需要0.6秒。
        备注:一楼附件是去灰底代码Plus版。Plus版效果见16楼。
      附件中新增了图像的3种锐化效果、图像对比度、亮度、饱和度调整代码。
三、关于AForge类库下载:
   红色框中任意选择一个下载:
   Download Installer  控件库安装包
   Download Full ZIP Archive  完整的ZIP文档
   Download Libraries Only  仅仅下载类库
   Release Notes  发行说明

图片点击可在新窗口打开查看此主题相关图片如下:aforgedown.jpg
图片点击可在新窗口打开查看

对比代码:
     在Foxtable中新建一个窗口,添加一个按钮、一个图片框
     按钮写入 VB.Net Laplacian(拉普拉斯)算子图片锐化代码如下:   
        Dim ImagePath As String
        Dim dlg As OpenFileDialog = Me.OpenFileDialog1
        If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
            ImagePath = dlg.FileName
        Else
            Return
        End If
        Dim tempImage As Image = Image.FromFile(ImagePath)
        Dim Height As Integer
        Height = tempImage.Height
        Dim width As Integer
        width = tempImage.Width
        NewBitmap = New Bitmap(width, Height)
        Dim OldBitmap As Bitmap = New Bitmap(ImagePath)
        
        Dim t As Date = Date.Now
        Try

            '在使用本函数对彩色图像进行锐化处理时,应该选择{0,-1,0,-1,5,-1,0,-1,0}作为模板,所用模板能在最大限度保证彩色图像不失真的前提下,使图像轮廓线更清晰。
            Dim pixel As Color
            'Dim Laplacian() As Integer = {0, -1, 0, -1, 5, -1, 0, -1, 0}
            Dim Laplacian() As Integer = {-1, -1, -1, -1, 9, -1, -1, -1, -1}
            
            For x As Integer = 1 To width - 2
                For y As Integer = 1 To Height - 2
                    Me.ProgressBar1.Value = x + y
                    Dim r As Integer = 0
                    Dim g As Integer = 0
                    Dim b As Integer = 0
                    Dim index As Integer = 0
                    For col As Integer = -1 To 1   '用Laplacian(拉普拉斯)算子计算当前坐标处像素的上、下、左、右及四角共8处(英文:8 neighbor)的像素值
                        For row As Integer = -1 To 1
                            pixel = OldBitmap.GetPixel(x + row, y + col)
                            r = r + pixel.R * Laplacian(index)
                            g = g + pixel.G * Laplacian(index)
                            b = b + pixel.B * Laplacian(index)
                            index = index + 1
                        Next
                    Next
                    '防止像素值溢出
                    If r > 255 Then r = 255
                    If r < 0 Then r = 0
                    If g > 255 Then g = 255
                    If g < 0 Then g = 0
                    If b > 255 Then b = 255
                    If b < 0 Then b = 0

                    '将指定坐标处的像素设为指定的颜色
                    NewBitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b))
                Next
            Next
          Dim pic As WinForm.PictureBox = e.Form.Controls("PictureBox1")
          pic.SizeMode = ImageSizeMode.Zoom
          pic.Image = NewBitmap

        Catch ex As Exception
            MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            MsgBox("耗时: " & (Date.Now - t).TotalSeconds & " 秒")
        End Try

一楼:去灰底效果。附件中更新了图像的3种锐化效果、图像对比度、亮度、饱和度调整代码。
效果如下:
原图片:

图片点击可在新窗口打开查看此主题相关图片如下:img_20170527_163415.jpg
图片点击可在新窗口打开查看



去灰底后的图片:

图片点击可在新窗口打开查看此主题相关图片如下:clearbord.jpg
图片点击可在新窗口打开查看

去灰底代码:

以下内容只有回复后才可以浏览


图片锐化代码:1、AForge默认锐化(实际就是拉普拉斯算子锐化)。2、高斯锐化。3、自定义卷积滤镜锐化
并附上:对图片像素的亮度、对比度、饱和度调整代码。


以下内容只有回复后才可以浏览


[此贴子已经被作者于2017/5/29 22:13:48编辑过]

 回到顶部
总数 116 1 2 3 4 5 6 7 8 9 10 下一页 ..12