当前位置: 首页 > 编程日记 > 正文

数字图像处理课设

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

232640_QdyF_1455020.png

对于整个窗体的设计,菜单组件(MenuStrip)和工具条(ToolStrip)来添加相应的功能事件当然还有右击鼠标就能弹出相应的属性框,也是使用了叫contextMenuStrip的组件。

*每次加载的图片,都要重绘在窗体上,以及后面的对图片的处理都需要刷新图片,对同一个位图变量bitmap sourceBitmap进行重绘。代码如下:

  //重绘private void Form1_Paint(object sender, PaintEventArgs e){try{if (sourceBitmap != null){Graphics g = e.Graphics;g.DrawImage(sourceBitmap, 420, 63, pictureBox1.Width, pictureBox1.Height);}}catch (Exception ex){MessageBox.Show(ex.Message);}}

我以前总觉得在窗体上只能画些简单的几何图形,没想到有专门的函数画下一张图片。呵呵。可见眼界的狭窄。

当然对图片进行重绘之前,当然是加载图片啦!代码如下:

  private void 打开ToolStripMenuItem_Click(object sender, EventArgs e){OpenFileDialog openFileDialog1 = new OpenFileDialog();openFileDialog1.Filter = "所有图片文件(*.bmp/*.jpg/*.gif)|*.*|Jpeg文件(*.jpg)|*.jpg|Bitmap文件(*.bmp)|*.bmp|gif文件(*.gif)|*.gif";openFileDialog1.FilterIndex = 2;openFileDialog1.RestoreDirectory = true;if (DialogResult.OK == openFileDialog1.ShowDialog()){currentImageFile = openFileDialog1.FileName;pictureBox1.Image = Bitmap.FromFile(currentImageFile, false);sourceBitmap = (Bitmap)Image.FromFile(currentImageFile);Invalidate();//this.label1.Text = "源图像";this.label2.Text = "源图像(待处理)";}}

对于的图片的使用当然会用到图片保存的功能啦:这个也是方便以后查阅如何保存相应的文件啦

//保存处理后的图片private void 保存ToolStripMenuItem_Click(object sender, EventArgs e){if (sourceBitmap != null){Bitmap bitmap = sourceBitmap;SaveFileDialog savaFiledialog1 = new SaveFileDialog();savaFiledialog1.Filter = "Bitmap文件(*.bmp)|*.bmp|JPEG文件 (*.jpg)|*.jpg|gif文件(*.gif)|*gif";savaFiledialog1.FilterIndex = 2;savaFiledialog1.RestoreDirectory = true;if (DialogResult.OK == savaFiledialog1.ShowDialog()){bitmap.Save(savaFiledialog1.FileName);}}else{MessageBox.Show("无处理后的图像可保存", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);}}
/*对于上面的图片保存的练歌语句的相应解释:
1savaFiledialog1.Filter = "Bitmap文件(*.bmp)|*.bmp|JPEG文件 (*.jpg)|*.jpg|gif文件(*.gif)|*gif"; 
saveFileDialog1.FilterIndex = 2;  //索引设成2,那么当出现对话框时,文件保存类型,默认为".jpg"
2.saveFileDialog1.RestoreDirectory = true; 设为true时,对话框选择的目录会重新回到关闭此对话框时候的当前目录,就是点保存后,对话选择的默认目录为上次关闭时的目录*/

*灰度化相关代码:

           //灰度化public static bool GrayScale(Bitmap b){BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//将该图片的内存数据锁存起来int stride = bmData.Stride;//一张图片的步幅System.IntPtr scan0 = bmData.Scan0;unsafe{byte* p = (byte*)(void*)scan0;//获取第一个像素的指针int noffset = stride - b.Width * 3;//步幅减掉width*3个字节即是空出来的偏移量,每张图都是这样布局的总是多出来一点byte red, green, blue;for (int y = 0; y < b.Height; y++){for (int x = 0; x < b.Width; x++){blue = p[0];green = p[1];red = p[2];p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);//红绿蓝的颜色值都相同的时候,即实现了灰度化。p += 3;}p += noffset;}}b.UnlockBits(bmData);return true;}

上述代码中使用到了safe{}这种非托管代码,需要进入主菜单上的项目选项里,选择最后一个,项目属性,点击生成选项,勾选”允许不安全代码“即可使用指针了。还有其他功能转到下几篇写吧。写的太长感觉太压抑

转载于:https://my.oschina.net/RabbitXiao/blog/348364

相关文章:

Swift3.0带来的变化汇总

var string "Hello-Swift" //获取某个下标后一个下标对应的字符 char"e" //swift2.2 //var char string[startIndex.successor()] //swift3.0 var char string[string.index(after: startIndex)] //获取某个下标前一个下标对应的字符 char2 "t&qu…

通过配置NFS使Ubuntu和海思3559A板子共享目录

之前在Ubuntu和海思3559A板子之间来回拷贝文件都是用的scp命令&#xff0c;不是很方便&#xff0c;这里通过配置NFS来实现它们之间共享目录&#xff0c;操作步骤如下&#xff1a; 1. 在Ubuntu上安装NFS&#xff0c;执行以下命令&#xff0c;执行结果如下&#xff1a; sudo ap…

22w+的人选择了这款蓝牙耳机

01现在有两个电子产品&#xff0c;应该是你们现在必有的&#xff0c;手机和电脑。但还有一样不可缺少的电子产品&#xff0c;那就是耳机。不管喜不喜欢带&#xff0c;反正你手里肯定有一个&#xff0c;应该没人不认可我说的这个话吧。反正我去哪都会带着耳机&#xff0c;听不听…

自定义数字格式字符串输出示例

自定义数字格式字符串输出示例 MSDN 下表阐释了通过给特定数据类型和值应用某些自定义数字格式字符串来创建的输出。输出是通过使用 ToString 方法和美国英语 (en-US) 区域性生成的。 “格式字符串”列指示格式字符串&#xff0c;“数据类型”列指示所用的数据类型&#xff0c;…

海思3559A上编译LIVE555源码操作步骤

1. 从http://www.live555.com/liveMedia/public/ 下载live.2019.06.28.tar.gz&#xff0c;并解压缩&#xff1b; 2. 生成静态库&#xff0c;拷贝一份config.armlinux&#xff0c;取名为config.hi3559a&#xff0c;修改后的内容如下: CROSS_COMPILE? /opt/hisi-linux/x86-ar…

基于海康机器视觉算法平台的对位贴合项目个人理解 | CSDN原力计划

扫码参与CSDN“原力计划”作者 | 果汁分你一半哈哈来源 | CSDN原力计划获奖作品都说“纸上得来终觉浅&#xff0c;绝知此事要躬行”&#xff0c;可惜咱没这条件呀&#xff0c;没项目咱也不能干坐着呀&#xff0c;那咱发挥主观能动性&#xff0c;咱不是学机械的么&#xff0c;还…

解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题

swift中开发选择图片上传&#xff0c;会使用到Tap Gesture Recognizer控件&#xff0c;对应 UITapGestureRecognizer API&#xff0c;以下是代码示例&#xff08;取自IOS developer library&#xff09;&#xff1a; IBAction func selectImageFromPhotoLibrary(_ sender: UIT…

测试发现equals和hashCode与书上描述的不一样

2019独角兽企业重金招聘Python工程师标准>>> 如果两个对象根据equals()方法比较是相等的&#xff0c;那么调用这两个对象中任意一个对象的hashCode方法都必须产生同样的整数结果。但是现实情况&#xff0c;两者产生的hashCode值却不相等求解&#xff1f; 转载于:htt…

海思3559A上编译OpenCV4.1.0源码操作步骤

1. 从https://github.com/opencv/opencv/releases 下载opencv源码opencv-4.1.0.zip并解压缩&#xff1b; 2. 修改最顶层的CMakeLists.txt&#xff0c;在第658行加入一条语句如下&#xff0c;fix error: pngstruct.h:30:18: fatal error: zlib.h: No such file or directory #i…

如何从零开始设计与开发一款通用模型预测调度系统 | 干货分享

机器学习模型从训练导出到生成环境部署&#xff0c;这个过程中涉及大量工作&#xff0c;会面临着各种问题与挑战&#xff0c;比如不断丰富的业务场景&#xff0c;系统需要负载种类繁多的神经网络&#xff0c;预测任务不均匀等&#xff0c;然而企业拥有的计算资源&#xff08;如…

闲来无事,总结 Xcode常用快捷键

IOS模拟器home键&#xff1a;Command Shift H 构建应用程序&#xff1a;Command &#xff0b; B 运行app&#xff1a;Command &#xff0b; R 清理工程&#xff1a;Command &#xff0b; Shift &#xff0b; K 打开Xcode首选项&#xff1a;Command &#xff0b; &#xff…

openNebulafrontEnd ComputeNode 配置记录

openNebulafrontEnd ComputeNode 配置记录 1,OpenNebula nfs(file system shared) for image datastore; openNebula computeNode挂载,如果frontend与compute在同一台服务器则不用做NFS shared; 3,make raw image 4,配置过程中配置服务器网桥报错 报错信息 bringing up interfa…

武汉大学提出ARGAN:注意力循环生成对抗模型用于检测、去除图像阴影 | ICCV 2019...

作者 | 王红成出品&#xff5c;AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】如何去除一张图像中的阴影部分&#xff1f;在ICCV 2019会上&#xff0c;武汉大学的一篇论文针对这一问题提出了一种用于阴影检测和去除的注意循环生成对抗网络——ARGAN。论…

海思3559A上编译libyuv源码操作步骤

1. 下载libyuv源代码&#xff0c;执行&#xff1a; git clone https://chromium.googlesource.com/libyuv/libyuv 2. 通过CMakeLists.txt编译生成库&#xff0c;build.sh脚本内容如下&#xff1a; cmake \-DCMAKE_BUILD_TYPERELEASE \-DCMAKE_C_COMPILER/opt/hisi-linux/x86…

Cocoapods的安装以及使用(2)

Cocoapods 在网上看博客&#xff0c;看了好多次&#xff0c;都没有学会cocoapods&#xff0c;今天上午浪费了一上午的时间&#xff0c;终于算是学会了。其实也是很简单的。 iOS 新版 CocoaPods 安装流程 1.换掉现有Ruby默认源&#xff08;由于好多人都没有翻墙&#xff0c;所…

MyEclipse10中导入的jquery文件报错(出现红叉叉,提示语法错误)

为了做一个页面特效&#xff0c;导入了一个jquery文件&#xff0c;怎想&#xff0c;myeclipse竟然报错说是语法错误&#xff0c;但是这个js文件我是从官网上下载的&#xff0c;不应该出错才对&#xff0c;百度谷歌之后终于找到了解决办法&#xff1a; 选中报错的js文件&#xf…

海思3559A上编译libjpeg-turbo源码操作步骤

1. 从https://github.com/libjpeg-turbo/libjpeg-turbo/releases/tag/2.0.2 下载libjpeg-turbo 2.0.2版本&#xff1b; 2. 脚本build.sh内容如下&#xff1a; cmake \-DCMAKE_BUILD_TYPERELEASE \-DCMAKE_C_COMPILER/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarc…

免费!这里有一份开发者进阶“宝典”求带走

作为开发者&#xff0c;无论是前端还是后端&#xff0c;做机器学习还是云计算、架构&#xff0c;保持对技术的敏感性都是非常重要的事。新技术一般发源于人力、财力等各方面资源都很雄厚的大厂&#xff0c;经过时间的沉淀逐渐成为技术主流。因此&#xff0c;从 BAT、Google、Fa…

使用终端建立自己需要工程

cocoapods应该是时下类库比较全面的三方管理工具&#xff0c;使用也特别方便&#xff0c;你只需将别人的类库在你的 podfile中 pod "SomeoneNameLibrary" 就可以在你的工程中使用这个库&#xff0c;作为一个开发者&#xff0c;你是否也想让别人在他的项目中 pod &quo…

1.0 封装后的布局成本

2019独角兽企业重金招聘Python工程师标准>>> 1.0.1 C语言中&#xff08;.c&#xff09; 1. 数据和函数是分开声明的&#xff0c;语言本身没有支持“数据和函数”之间的关联性。 2. 这种程序方法为程序性的&#xff0c;由一组“分布在各个以功能为导向的函数…

通过gdb core dump方法查看程序异常时的堆栈信息

在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息。core dump叫做核心转储&#xff0c;当程序运行过程中发生异常的那一刻的一个内存快照&#xff0c;操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下&#xff0c;会把进程…

日均350000亿接入量,腾讯TubeMQ性能超过Kafka

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】近日&#xff0c;腾讯开源动作不断&#xff0c;相继开源了分布式消息中间件TubeMQ&#xff0c;基于最主流的 OpenJDK8开发的Tencent Kona JDK&#xff0c;分布式HTAP数据库 TBase&#xff0c;企业级…

iOS应用版本更新(自动提醒用户)

在#import "AppDelegate.h" 文件中的application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中调用检测结果 获得发布版本的Version 比较当前版本与新上线版本做比较 UIAlertView代理方法

Bash Shell脚本编程-变量知识

Shell:GUI CLI提供交互式接口&#xff1a;提高效率命令行展开&#xff1a;~ &#xff0c;{}命令别名&#xff1a;alias命令历史&#xff1a;historyGlobbing&#xff1a;*&#xff0c;&#xff1f;&#xff0c;[]&#xff0c;[^]命令补全&#xff1a;$PATH指定的目录下路径补全…

FFmpeg中可执行文件ffplay用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的windows 64位FFplay。目前linux下的只有3.2版本的。FFplay是一个由FFmpeg和SDL库组成的简单媒体播放器&#xff0c;它主要用作各种FFmpeg API的测试。 通过执行以下命令将FFplay信息重定位到ffplay_help.txt文件中便于…

用Go重构C语言系统,这个抗住春晚红包的百度转发引擎承接了万亿流量

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;11 月 20 日&#xff0c;百度的万亿流量转发引擎 BFE 登上了 GitHub Trending Top 3&#xff0c;今日 Star 已突破 270。事实上&#xff0c;这个曾经抗住 2019 年春晚抢红包的转发引擎早已于 2019 年夏在 G…

Swift3.0带来的变化汇总系列一——字符串与基本运算符中的变化

var string "Hello-Swift" //获取某个下标后一个下标对应的字符 char"e" //swift2.2 //var char string[startIndex.successor()] //swift3.0 var char string[string.index(after: startIndex)] //获取某个下标前一个下标对应的字符 char2 "t&qu…

vc+如何添加右键弹出菜单

2019独角兽企业重金招聘Python工程师标准>>> 一、创建新工程 二、编辑菜单资源 1、添加菜单 按“CtrlR”&#xff0c;双击“Menu”图标2、于菜单编辑器内编辑菜单四、添加代码&#xff08;红色部分&#xff09; void CCMenuView::OnUpdateShow(CCmdUI* pCmdU…

EMNLP 2019 | 大规模利用单语数据提升神经机器翻译

BDTC大会官网&#xff1a;https://t.csdnimg.cn/q4TY作者 | 吴郦军、夏应策来源 | 微软研究院AI头条&#xff08;ID:MSRAsia&#xff09;编者按&#xff1a;目前&#xff0c;目标语言端的无标注单语数据已被广泛应用于在机器翻译任务中。然而&#xff0c;目标语言端的无标注数据…

swift 3.0 json解析、字典转模型三种方案

swift3.0发布有一段时间了&#xff0c;发现很多朋友在swift3.0json解析上上遇到很多问题&#xff0c;我这边为大家提三种常见的json方案。 1.第一种是自带的字典转模型&#xff0c;自带的需要实现系统的setValue方法&#xff0c;然后自己还要实现dictToModel方法即可解析&…