使用MFC在VS2013编写的数字图象处理软件,能够实现相当强大的功能。
BMP格式读取保存DFTFFT直方图色调均化缩放模糊锐化滤镜形态学处理曲线裁剪灰度图彩色图自动阈值等等...除此之外还有很多其他小功能...建议使用VS2013打开!!!核心代码在Bmp.cpp中!!!更新文档:2014年6月18日更新说明:这次应该是上交的最后一次作业了,在今日的展示结束之后总体情况还好,但是发现了几个问题。
首先是这个程序是在win8环境下设计的,所以程序的一些大小参数以及按钮图片的位置参数是适合在win8的环境下操作,在设计报告中使用的操作系统也是win8。
而如果将该程序移动至win7系统上操作的话可以在大小与位置上会出现一些偏差,所以推荐将该程序在win8系统下运行,如果没有win8系统但是想重装的话可以找我。
然后本次更新的内容就是对设计报告中的要求的一些补充,比如图片的裁剪功能,还有一些照旧的BUG修复了。
关于这个裁剪功能,在程序中的图像裁剪中有一个说明按钮,在设计报告中有提到怎么使用的,所以在这里就不一一说明了,其实就跟在PS上用裁剪差不多,很容易用的。
关于设计的感想也写在了设计报告上了--,这里也就不多说了。
好了这个程序算是最终完成了,撒花!师姐辛苦了~!!!!!================================================================================================================================================================2014年5月13日更新说明:这次的更新比较少,主要就是自动阈值分割图像方面的更新。
实现该操作的函数依然放在Bmp.cpp里面,里面一共使用了三种方式来决定自动阈值。
其中一种是“大津法”,函数是“OtsuThreshold”,该函数最后会返回一个阈值,该阈值就是大津法得出的阈值,具体实现方式可以在cpp文件中查看。
还有一种方法就是“迭代法”,函数是“IterationThreshold”,该函数最后会返回一个阈值,该阈值就是迭代法得出的阈值,具体实现方式可以在cpp文件中查看。
前两种方法的实现方法都如老师在PPT上所说的一样,而且运算起来非常快,基本可以说是瞬时得出。
而第三种方法是我自己写的一个方法,叫做“对半分”法,函数是“HalfCutThreshold”,该函数最后会返回一个阈值,该阈值就是对半分得出的阈值,具体实现方式可以在cpp文件中查看。
其原理就是计算出一个阈值,使到阈值处理后图片的黑色像素与白色像素的数量相等或者最接近,也就是把图片按黑白像素对半分的方法来对图像进行分割。
关于程序的使用方法,可以在鼠标右键菜单中选择“调整”->“阈值”->“高级阈值”来打开高级阈值处理的对话框。
打开对话框后,默认为最直接的自己首选阈值的方法,可以通过鼠标的左键拖动直方图中的绿色竖线来调整需要设定的阈值大小,同时右边会有该图片的预览,可以很方便操作。
如果需要使用自动阈值分割,可以在阈值方式中更改,一旦选择了“直接阈值”以外的阈值方式,程序便会自动用所选择的方法帮你计算出一个阈值,同时在直方图上会显示出该阈值的位置,还有该阈值的大小,同时预览图片也会立即更新。
值得注意的是,当你选择了自动阈值的时候,你不能再通过鼠标左键在直方图上手动调整阈值大小了哦,这个时候你只需要将阈值方式调回“直接阈值”即可重新自己调整!除了有关作业的更新之外,这次更新还调整了图片备份的内存优化,加上了使用磁盘作为备份的空间,不过这些作为使用者的话是不需要怎么注意的嗯嗯,尽情使用即可!最后,再次谢谢师姐能够读完这个文档,如果还有什么问题的话就联系我吧,联系方式就在软件中了欢迎点击--,谢谢!================================================================================================================================================================2014年5月6日更新说明:这次的主要更新是形态学处理的部分,也就是膨胀、腐蚀、开与闭操作。
实现函数依然是放在Bmp.cpp这个文件里面。
名字为Morphology的函数就是该形态学操作的函数。
可以通过在函数中调入不同的参数与设置使到一个函数同时实现膨胀与腐蚀的功能,而开与闭的功能只需要连续调用两次函数,并且参数不同就行了,使用非常简单。
然后就是软件的使用部分,
1
详细介绍了java如何使用SSL来进行socket通信了最主要的是介绍了如何使用keytool来生成.keystore文件ps:设置一分是希望那些刚入门或则对csdn访问不多的朋友多花点时间表面上市搞积分事实上是有帮助的。
如果你实在没有积分可以私信我
2024/1/25 11:42:45 17KB java socket ssl
1
参照网上小翼的教程做的。
由于ps能力不足,所以没有实现换皮肤的功能,其他功能都实现了
2024/1/23 9:47:46 10.57MB Java 俄罗斯方块
1
这是一个基于VGA显示和PS2键盘的贪吃蛇游戏进入时屏幕提示“entertoplay”,W,S,A,D四个CS游戏方向键,可按下P(PAUSE)暂停,进入选择关级,然后按下G(GO_ON)继续。
游戏设置9关,每关吃下21个苹果即可过关。
蛇的移动速度随着关级增加。
2024/1/21 7:23:12 450KB verilog fpga vga 贪吃蛇
1
Multi-PIE数据库人脸关键点标注,适合于用multi-pie数据库做人脸关键点定位及人脸检测算法的训练和测试。
PS,只标注了一部分。
2024/1/13 16:54:55 6.69MB Multi-PIE
1
这个是我早期整理和编写的基于GB/T28181协议的IPC模拟器源码,在VS2010环境下使用c语言开发,基本实现了GB/T28181的接入和视频请求协议,对于视频请求的处理,我从文件中读取ps流发送给请求端,曾经接入到海康平台下测试通过(注意:请求客户端于该ipc模拟器不能在同一机子上,因为sip协议的源和目的地相同会出现请求不到视频流的问题)
2024/1/8 17:40:50 15.34MB GB/T28181 VS2010 IPC
1
masm2015forwindows,是一款用于编写汇编语言的编译器。
可以进行汇编语言代码的编写,编译,和运行。
有点在于,可以直接在Windows7,8,xp上运行,操作过程简单,容易上手,不必在dos窗口下操作那么麻烦。
ps:来源:网络,开发者:钟家民
2023/12/25 18:53:41 15.42MB masm windows
1
Asp这个老古懂估计没几个人在用了。
几年没写代码了,最近要弄个小东西,给手机端提供json数据,不想麻烦别人,自己又只会asp,没办法就自己动手了。
网上找了好久都没有一个人能完整的把asp操作json说清楚。
最后还是自己搞定的。
整出来共享给大家。
(ps,还有个原因csdn的分不够用啦,大家看着给点吧。
写这个说明文档都用了我两小时。
^_^)以下是示例代码'说明:json.asp中引用了json.js.asp'其他见文档'手机很多时候不认gb2312,跳入json的坑就忘记gb2312吧,讨厌的是,如果代码报错,iis会输出gb2312,结果就是乱码,有点烦。
'自己想办法解决吧response.Charset="utf-8"dimstrJsonData,ovbJson,jdimarrTemp,varname,isetovbJson=newvbJson'asprecrodset和数组转json字符arrTemp=array("a","{""oa"":""我是oa""}","c")strJsonData=ovbjson.toJson(empty,arrTemp,true)'转换为Json格式的字符串,有兴趣可以自己输出看看是什么setj=json.parse(strJsonData)'序列化为json对象(或者是数组对象)response.Write(j.get(1)&"")'别用vb数组来存json对象,不然得每个元素去重新序列化,这里如果想j.get(1).oa就不行了。
必须对j.get(1)单独序列才行'----recrodset就不演示了,懒得连数据库'---自定义操作方法的演示---strJsonData="{a:1,b:[{c:'我是数组中的点c'}]}"setj=json.parsestr(strJsonData)response.Write(j.b.get(0).c&"")'添加节点的时候注意,如果值是null,会被忽然,这个节点会不存在的。
在添加之前记得先检查值setj=json.add(j,"new","我是新加的节点")response.Write(j.new&"")'下面这句注掉了,是因为这个操作是无效的因为j.b是数组,不能add'setj=json.add(j.b,"new1","我是加不进的节点")setj.b=j.b.put(j.b.length,j.b.get(0))response.Write(j.b.get(1).c&",我是新加的数组元素")'因为数组的get方法不允许被赋值,所以不能像下面这样写'setj.b.get(0)=json.add(j.b.get(0),"new","我会报错")json.addj.b.get(0),"new","我是新加的new我不会报错"json.addj.b.get(0),"new1","我是通过变量取出来的哦"response.Write(j.b.get(0).new&"")varname="new1"response.Write(json.byname(j.b.get(0),varname)&"")fori=0toj.b.length-1 varname="c" response.Write(json.byname(j.b.get(i),varname)&"我是循环出来的c,索引:"&i&"")next'最后完整的输出给手机就这样:response.Writejson.stringify(j)
2023/12/24 12:28:04 24KB asp json
1
VC++6.0+MFC做毕设做的网络聊天具(服务端和客户端),包括:0.普通聊天(文字、图片)1.聊天室2.传输文件(断点续传)3.共享屏幕4.白板5.视频、音频聊天模仿Netmeeting,资源也来源于Netmeeting、飞秋和PS。
所有代码均为自己一行行编写。
视频聊天时还有此问题,过段时间可能会崩溃。
有兴趣的朋友可以看看,做这个时也没有什么经验,全靠自己网上找资料瞎摸。
2023/12/24 8:21:44 1.51MB QQ 飞秋 即时通讯 MFC
1
ZedBoard-自定义IP核实现+PS成功调用【详细步骤+流程介绍+源码
2023/12/24 1:30:36 5.64MB ZedBoard IP核实现
1
共 326 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡