以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [分享]图片去除灰底、锐化、柔化、图片无损压缩、任意位置添加水印等等 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=101287) |
-- 作者:黄训良 -- 发布时间: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 发行说明 对比代码: 在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种锐化效果、图像对比度、亮度、饱和度调整代码。 效果如下: 原图片: 去灰底后的图片: 以下内容只有回复后才可以浏览 图片锐化代码:1、AForge默认锐化(实际就是拉普拉斯算子锐化)。2、高斯锐化。3、自定义卷积滤镜锐化 并附上:对图片像素的亮度、对比度、饱和度调整代码。 以下内容只有回复后才可以浏览 [此贴子已经被作者于2017/5/29 22:13:48编辑过]
|
-- 作者:zhangjian222200 -- 发布时间:2017/5/27 17:08:00 -- 看看,如果在图片上,显示另一个图片,做水印,可以做? [此贴子已经被作者于2017/5/27 17:09:28编辑过]
|
-- 作者:黄训良 -- 发布时间:2017/5/27 17:30:00 -- 可以,这是AForge.Net的小功能! 下图是我的水印设置窗口:
[此贴子已经被作者于2017/5/27 17:34:41编辑过]
|
-- 作者:有点蓝 -- 发布时间:2017/5/27 18:14:00 -- 谢谢分享 |
-- 作者:kylin -- 发布时间:2017/5/27 18:17:00 -- 谢谢楼主! |
-- 作者:kylin -- 发布时间:2017/5/27 18:45:00 -- 类库文件能上传? |
-- 作者:binabc2004 -- 发布时间:2017/5/27 19:01:00 -- 利害 |
-- 作者:yinyb36 -- 发布时间:2017/5/27 19:43:00 -- |
-- 作者:wei0769 -- 发布时间:2017/5/27 21:01:00 -- 高手 |
-- 作者:ap9709130 -- 发布时间:2017/5/27 22:44:00 -- 高手,学习! |