【转】c#数字图像处理(四)线性点运算

转自:https://www.cnblogs.com/dearzhoubi/p/8622325.html

灰度图像的点运算可分为线性点运算和非线性点运算两种。
4.1线性点运算定义
线性点运算就是输出灰度级与输入灰度级呈线性关系的点运算。在这种情况下,灰度变换函数的形式为:

g(x, y)=pf(x,y)+L

其中 f(x,y) 为输入图像在点 (x,y) 的灰度值, g(x,y) 为相应的输出点的灰度值。显然,如果P=1和L=0,g(x,y)就是f(x,y)的复制;如果P<1,输出图像的对比度将增大;如果P>1,则对比度将减少;如果P=1而L≠0,该操作仅使所有像素的灰度值上移或下移,其效果是使整个图像在显示时更暗或更亮;如果P为负值,暗区域将变亮,亮区域将变暗,该操作完成了图像求补。

 

linearPOForm.cs

复制代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace histogram
{public partial class linearPOForm : Form{public linearPOForm(){InitializeComponent();}private void startLinear_Click(object sender, EventArgs e){//设置DialogResult属性this.DialogResult = DialogResult.OK;}private void close_Click(object sender, EventArgs e){this.Close();}//设置两个get访问器public string GetScaling{get{//得到斜率return scaling.Text;}}public string GetOffset{get{//得到偏移量return offset.Text;}}}
}

复制代码

Form1.cs

复制代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace histogram
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//文件名private string curFileName;//图像对象private System.Drawing.Bitmap curBitmpap;/// <summary>/// 打开图像文件/// </summary>private void open_Click(object sender, EventArgs e){//创建OpenFileDialogOpenFileDialog opnDlg = new OpenFileDialog();//为图像选择一个筛选器opnDlg.Filter = "所有图像文件|*.bmp;*.pcx;*.png;*.jpg;*.gif;" +"*.tif;*.ico;*.dxf;*.cgm;*.cdr;*.wmf;*.eps;*.emf|" +"位图(*.bmp;*.jpg;*.png;...)|*.bmp;*.pcx;*.png;*.jpg;*.gif;*.tif;*.ico|" +"矢量图(*.wmf;*.eps;*.emf;...)|*.dxf;*.cgm;*.cdr;*.wmf;*.eps;*.emf";//设置对话框标题opnDlg.Title = "打开图像文件";//启用“帮助”按钮opnDlg.ShowHelp = true;//如果结果为“打开”,选定文件if (opnDlg.ShowDialog() == DialogResult.OK){//读取当前选中的文件名curFileName = opnDlg.FileName;//使用Image.FromFile创建图像对象try{curBitmpap = (Bitmap)Image.FromFile(curFileName);}catch (Exception exp){MessageBox.Show(exp.Message);}}//对窗体进行重新绘制,这将强制执行paint事件处理程序Invalidate();}/// <summary>/// 在控件需要重新绘制时发生/// </summary>private void Form1_Paint(object sender, PaintEventArgs e){//获取Graphics对象Graphics g = e.Graphics;if (curBitmpap != null){//使用DrawImage方法绘制图像//160,20:显示在主窗体内,图像左上角的坐标//curBitmpap.Width, curBitmpap.Height图像的宽度和高度g.DrawImage(curBitmpap, 160, 20, curBitmpap.Width, curBitmpap.Height);}}/// <summary>/// 关闭窗体 /// </summary>private void close_Click(object sender, EventArgs e){this.Close();}private void histogram_Click(object sender, EventArgs e){if (curBitmpap != null){//定义并实例化新窗体,并把图像数据传递给它histForm histoGram = new histForm(curBitmpap);histoGram.ShowDialog();}}private void linearPO_Click(object sender, EventArgs e){if (curBitmpap!=null){//实例化linearPOForm窗体linearPOForm linearForm = new linearPOForm();//点击确定按钮if (linearForm.ShowDialog()==DialogResult.OK){Rectangle rect = new Rectangle(0, 0, curBitmpap.Width, curBitmpap.Height);System.Drawing.Imaging.BitmapData bmpData = curBitmpap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmpap.PixelFormat);IntPtr ptr = bmpData.Scan0;int bytes = curBitmpap.Width * curBitmpap.Height;byte[] grayValues = new byte[bytes];System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes);int temp = 0;//得到斜率double a = Convert.ToDouble(linearForm.GetScaling);//得到偏移量double b = Convert.ToDouble(linearForm.GetOffset);for (int i = 0; i < bytes; i++){//根据公式计算线性点运算//加0.5表示四舍五入temp = (int)(a * grayValues[i] + b + 0.5);//灰度值限制在0~255之间//大于255,则为255;小于0则为0if (temp>255){grayValues[i] = 255;}else if (temp<0){grayValues[i] = 0;}else{grayValues[i] = (byte)temp;}}System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes);curBitmpap.UnlockBits(bmpData);}Invalidate();}}}
}

复制代码

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作人员做好项目协调服务器,项目团队协作做好三件事

原标题&#xff1a; 项目团队协作做好三件事大家也许在小时候就听过三个和尚的故事&#xff1a;当庙里有一个和尚时&#xff0c;他一切自己做主&#xff0c;做得很自在;当庙里有两个和尚时&#xff0c;他们通过协商可以自觉地进行分工合作&#xff0c;同样做的不错;可当庙里来了…

给vc6插上翅膀

最重要的当然是VC助手了。。我比较喜欢低版本的Visual.Assist.v6.0.0.1079.zip&#xff0c;环保类型的 但无奈我的vs2005也想使用这个插件&#xff0c;所以我选择了VisualAssistXv10&#xff0c;目前装的是Visual.Assist.X.10.4.1626.0 以前还用过一些版本很奇怪的&#xff0c;…

【转】[程序集清单定义与程序集引用不匹配]分析及解决

转自&#xff1a;https://www.cnblogs.com/shuangzimuchangzhu/p/8572817.html 什么是程序集清单(Assembly Manifest)? 我们知道&#xff0c;在.net中。程序是以程序集为单位进行打包的&#xff0c;通常一个.exe文件或一个.dll文件就是一个程序集。程序集一般包含了以下几个部…

dos如何修改远程服务器的密码,dos命令登入远程服务器

dos命令登入远程服务器 内容精选换一换远程桌面链接Windows云服务器报错&#xff1a;连接被拒绝&#xff0c;因为没有授权此用户账户进行远程登录。Windows远程桌面相关权限配置异常。在运行窗口输入secpol.msc&#xff0c;打开组策略编辑器打开"本地策略 > 用户权限分…

设计模式C++实现 ——状态模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性&#xff1a;封装、继承、多态&#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程&#xff0c;需要大量实践经验的积累。最近看设计模式的书&#xff0…

【转】正确认识动脉压力波形

转自&#xff1a;https://www.sohu.com/a/288192545_377325 前言 早在50多年前&#xff0c;就已经在麻醉患者中开始进行直接动脉血压监测。尽管对动脉压力波形的形态和细节进行分析可以给我们提供一些有用的诊断信息&#xff0c;但现代的医生似乎很少关注它。临床实践中的这些…

2008服务器ftp上传文件,win2008怎么开通服务器ftp上传

win2008怎么开通服务器ftp上传 内容精选换一换GPU加速型实例如需使用OpenGL/DirectX/Vulcan等图形加速能力则需要安装GRID驱动并自行购买和配置使用GRID License。此外&#xff0c;GRID驱动配合vDWS类型License&#xff0c;也支持CUDA&#xff0c;用来满足既需要计算加速也需要…

【转】DICOM中几个判断图像方向的tag

转自&#xff1a;https://www.cnblogs.com/h2zZhou/p/9072967.html 在DICOM标准里&#xff0c;有三个TAG与成像的方向相关。 参考来源&#xff1a;Kitware关于DICOM方向的说明 http://public.kitware.com/IGSTKWIKI/index.php/DICOM_data_orientation 包括 1、Image Positi…

学习 SQL 语句 - Select(4): 排序

Order By Asc|Desc本例效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids, DB, ADODB;typeTForm1 class(TForm)DBGrid1: TDBGrid;DataSource1: TDataSource;…

【转】Ubuntu 16.04 远程桌面

转自&#xff1a;实现Windows直接远程访问Ubuntu 18.04&#xff08;旧版本也支持,无需安装第三方桌面,直接使用自带远程工具&#xff09; - 法号阿兴 - 博客园 一、设置Ubuntu 16.04 允许进行远程控制 首先&#xff0c;我们先设置Ubuntu的远程控制&#xff0c;将其设置为允许被…

GridView应用整理

2009年5月31日下午 21:58:38 获取GridView中RowCommand的当前选中行索引 <asp:GridView ID"BookGridView" runat"server"><Columns><asp:BoundField DataField"id" HeaderText"图书编号" /><asp:BoundField Data…

【转】Ubuntu下使用sysv-rc-conf管理服务

转自&#xff1a;https://www.linuxidc.com/Linux/2016-11/136834.htm sysv-rc-conf简介 sysv-rc-conf是一个强大的服务管理程序&#xff0c;群众的意见是sysv-rc-conf比chkconfig、rcconf好用。 背景知识 Ubuntu运行级别 Linux 系统任何时候都运行在一个指定的运行级上&…

【转】How to install VNC server on ubuntu 14.04

转自&#xff1a;https://www.krizna.com/ubuntu/install-vnc-server-ubuntu-14-04/ VNC server is used to share graphical desktop which can be controlled from other computers . This guide is helpful to install VNC server on Ubuntu Desktop 14.04, Ubuntu server …

Nsis 使用1-- 依条件显示自定义页面 custom page on condition

在制作安装程序的时候&#xff0c;我们会经常遇到根据用户的不同选择而随后显示不同的安装信息采集页面。 其实很简单&#xff0c;在使用NSIS的时候发现了这么个方法&#xff0c;记下来防止自己忘记哈&#xff1a;Code; MUI 2 compatible ------!include "MUI2.nsh"!…

WINCE6.0操作系统---内核(kernel)学习

备注&#xff1a;这里的内核指kernel&#xff0c;其表现形式为kernel.dll&#xff0c;OS指操作系统&#xff0c;core指核心。 图1 WINCE6.0体系结构 1. kernel的组成和功能 WINCE6.0操作系统内(kernel)在代码中的表现形式是kernel.dll(也就是kern.dll)&#xff0c; WINCE5…

WINCE6.0体系结构学习

WINCE6.0的体系结构图如下图所示&#xff1a; 图1 WINCE的体系结构 根据上图可以把WINCE6.0体系结构分为硬件层、OEM层、操作系统层和应用层&#xff0c;这四层紧密合作&#xff0c;相互配合来完成从应用程序的调用到对硬件的操作和交互。 1. 硬件层 硬件平台的核心是嵌入…

【转】深度理解C# 的执行原理

转自&#xff1a;https://zhuanlan.zhihu.com/p/47177008 从编译原理说起虚拟机是什么C# 是什么&#xff0c;IL 又是什么.Net Framework vs MonoUnity3D 中的 C#小结作者&#xff1a;易立 | 腾讯IEG高级工程师为什么 Unity3D 可以运行 C#&#xff0c;C# 和 Mono 是什么关系&am…

Java程序员的推荐阅读书籍

作为Java程序员来说&#xff0c;最痛苦的事情莫过于可以选择的范围太广&#xff0c;可以读的书太多&#xff0c;往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些&#xff0c;按照学习的先后顺序&#xff0c;推荐给大家&#xff0c;特别是那些想不断提高自己技术水…

【转】Win10系统创建WiFi热点的两种方法

现在电脑和wifi已经成为很多人生活中不可缺少的一部分&#xff0c;上网过程只有连接WiFi才可以上网。使用windows10系统开启WiFi热点都是提示没有找到支持的无线网卡。不管你是驱动更新&#xff0c;重装&#xff0c;还是怎么操作都是不能用。为此&#xff0c;大家不妨参考下文方…

【转】Win10系统怎么设置无线做AP热点_win10设置无线为ap热点的步骤

转自&#xff1a;http://www.win7zhijia.cn/win10jc/win10_33126.html 在win10系统中&#xff0c;默认情况下无线网卡大部分都用于STA模式&#xff0c;但是有时候需要将无线网卡的工作模式为SoftAP&#xff0c;这样如果有双网卡的话&#xff0c;就能够将本机网络共享给其他PC或…