-
光条中心线提取-Steger算法(基于Hessian矩阵)
光条中心线提取-Steger算法(基于Hessian矩阵) 参考以下博客进行了修改,修改了灰度阈值以及最后标注红线的部分。https://blog.csdn.net/dangkie/article/details/78996761#comments ({ =imread”D:\\结构光实验数据\\2019-11-20\\1_nl.bmp” ) Mat img (,,) img img0clone) imgconvertToimg CV_32FC1; GaussianBlurimg img (,0,6 ) Mat m1 m2 m1 Mat_float(,2 ,-) m2 Mat_float(,1 ,-) Mat dx dy (,,,) (,,,) Mat m3 m4 m5 m3 Mat_float(,3 ,-,1;//二阶x偏导 =(<>3 )<<1 2 ) m5 Mat_float(,2 ,-,-,1;//二阶xy偏导 ,,; filter2Dimg dxx CV_32FC1 m3; filter2Dimg dyy CV_32FC1 m4; filter2Dimg dxy […]
-
机器视觉方向大牛
(最近正在看0号人物的原始代码,可以窥视halcon的开发原理很不错) CV人物0:Carsten Steger, 德国慕尼黑工业大学教授,机器视觉权威Halcon 软件包的创始人 CV人物1:Jianbo Shi史建波毕业于UC Berkeley,导师是Jitendra Malik。其最有影响力的研究成果:图像分割。其于2000年在PAMI上多人合作发表”Noramlized cuts and image segmentation”。这是图像分割领域内最经典的算法。主页:www.cis.upenn.edu/~jshi/ 和www.cs.cmu.edu/~jshi/ CV人物2:Kristen Grauman毕业于MIT,导师是Trevor Darrell。其最有影响力的研究成果:Pyramid Match Kernel,用于图像匹配。她和Darrell在2005年CVPR合作发表了”The Pyramid Match Kernel: Discriminative Classification with Sets of Image Features”。金字塔匹配核函数可快速搜索两个特征集合之间匹配的特征,可应用于图像匹配、物体识别,是该领域经典算法之一。2011年Marr奖得主。主页:www.cs.utexas.edu/~grauman/ CV人物3:Irfan Essa现任教于Georgin Tech佐治亚理工大学,毕业于MIT,其最有影响力的研究成果:人脸表情识别。Essa和Alex Penland 在1997年PAMI合作发表了”Coding, analysis,interpretation,and recognition of facial expression”, 结合了几何模型和面部肌肉无力模型,用来描述脸部结构。主页:www.ic.gatech.edu/people/irfan-essa CV人物4:Matthew Turk毕业于MIT,最有影响力的研究成果:人脸识别。其和Alex Pentland在1991年发表了”Eigenfaces for Face Recognition”.该论文首次将PCA(Principal Component Analysis)引入到人脸识别中,是人脸识别最早期最经典的方法,且被人实现,开源在OpenCV了。主页:www.cs.ucsb.edu/~mturk/ CV人物5:David Lowe毕业于斯坦福大学,导师是Thomas Binfold,最有影响力的研究成果:SIFT。他是SIFT特征点检测的发明人。由于SIFT具有对于图像平移、旋转和尺度变化不变性的优点,使得SIFT成为近十年来最流行的图像特征点检测方法,被广泛用于图像匹配、物体识别、分类等领域。主页:http://www.cs.ubc.ca/~lowe/ CV人物6:Pascal Fua毕业于Orsay,导师是O.D.Faugera。最有影响力的研究成果:立体视觉。其在1993年发表了”A parallel stereo […]
-
看到一个php的极简写法很好看
<?phpinclude ‘view.php’;$title = ‘文档标题’;$a=array(‘a’=>’rows’,’b’=>array(‘c’=>’inarray’));include show(‘index’);?> <html><head><title>{title}</title><meta http-equiv=”Content-Type” content=”text/html;charset=utf-8″/></head><body>你好,仅供参考<br/>{a.a}{a.b.c}<br/>{foreach a:$v}{autoindex}.{v}<br/>{/foreach}</body></html>{include:footer}
-
用php写了个图床相关的
最近不是都说微博图床404了,我这么多年丢了好多文件,突然觉得有个图床也不错,写了个能用的,用qq空间里的图片和微博图片测试还可以具体如下 https://wx4.sinaimg.cn/large/005JCY4Qgy1hiz6pd1jozj30v916341q.jpg 下面直接插入,效果如下: 按我写的功能插入,如下:
-
实现了一个框架外挂
业务开发实践中,发现开发业务逻辑为了便于调整要么是走可配置方式要么是走脚本支持方式,可配置方式当前没见到有完美的,用起来都很别扭,而脚本方式的确很多商业软件就是这样的,但是无形当中要求了业务开发人员的脚本语言能力;为了做第一个纯配置方式的复杂业务开发,我实现了这个通过函数名调用任意用户后增加dll里未知函数的功能,实践测试了一下,相当风骚,先备份一个源码在这里;后续基于这个有很多玩法。 具体代码如下:
-
Flask已死,Fastapi才是未来[转]
Flask是一个在Python开发者心目中十分重要的项目,如果你是一个Web开发者,我相信你一定用过Flask,但是可能没有用过FastAPI。这个和国外相比可能会更明显一点,我觉得主要是因为国内已经没有多少人在写技术文章推荐,教大家分辨趋势或者主流,而一些老手即便知道它们的优缺点可能也懒得写对比文章,结果造成很多新人不了解怎么选,只能看一些老的文章、大V或者书籍的推荐作为选择的依据。 但是如果你有兴趣,你可以考证2点: 最近1-2年,Python相关的知名新项目中只要有Web的,基本都使用FastAPI。 今天(2023年12月18日)在Github上,FastAPI的star数(66k)已经超过了Flask(65.2)。 接着看一下Python官方的开发者调查中Web框架占比的变化: 可以看到19年FastAPI甚至不是一个选项,而22年已经占到25%的比率。这个开发者调查需要年中才会统计出上一年的,所以2023年的得明天第三季度才能知道,我预计FastAPI可以达到35%左右。 需要注意这个占比数据包含了现有系统,所以Django和Flask不容易跌得很快,但是趋势是很明显的。 我们知道Web框架这个领域是很高产的,基本每年都有新的框架诞生,大部分框架昙花一现,但有的框架却能够长青。FastAPI诞生于2018年底,在2019年年底左右开始崭露头角,那么为什么它可以在短短的5年里让关注度超过在2010年底诞生的Flask呢?接着我们顺着时间线捋捋Python Web框架和相关解决方案的发展来理解吧。 Web框架(插件、工具)发展史 FastAPI作者是一个非常关注Python生态发展的开发者,延伸阅读链接2是一篇作者写的,详细的介绍了FastAPI出各个库中的借鉴或者启发的细节,而发展史这部分我也参考了这篇文章。大家应该看看原文,里面包含了为什么会出现FastAPI以及作者的一些设计哲学。 Django Django是Python社区里最早做到统治级别的Web框架,当时知名的Instagram就是用它构建的。它的特点是大而全,各种web开发需要用到的细节它基本都有相关的模块,尤其和关系数据库、管理功能等方面耦合度非常高。对于熟悉的老手,这是一个生产级别的框架,但即便有完整的文档,对于初学者非常不友好,学习曲线中后期很陡峭,它的复杂度和定制成本非常高。 其实我这篇文章,也可以叫做「Django和Flask之死」,但是在框架应用场景角度来说Flask和FastAPI对比更合适,而Django直接和FastAPI相比有一些差别。在一些商业场景(例如CMS)Django依然是首选,而Flask(甚至FastAPI)看起来更像个「玩具」,所以Django短时间不会被取代(Flask这些年不是也是没取代的了嘛)。 Django REST Framework(DRF) Django主旨是为了在后端生成 HTML,而不是创建现代前端(如 React、Vue.js )或与其通信的其他系统使用的 API。所以FastAPI其实和Django REST Framework直接对标,它们主要场景都是构建 Web API,但是名字上也可以看出来,DRF还是依托于Django框架,所以缺点一样。 Flask Flask是一个「微」框架(Micro framework),和Django截然相反,它仅保留小部分的核心,还为了解耦把功能拆分成几个库(如Jinja2,Werkzeug等),所以开发者有足够的自由,你可以很容易写出相关功能的第三方插件。它里面的蓝图、上下文、装饰器表示路由、信号等等设计在当时是非常先进的,再加上文档写的很完整,可以说对新手极为友好。 Flask REST Frameworks 由于Flask的简单性,它非常适合构建API,不过由于Flask什么也不带,我们需要专门的REST框架。所以相继出现了 flask-restful 、Flask-RESTPlus、flask-api等框架,另外在Rest服务中,会需要数据验证、解析和规范等需要,也出现了Marshmallow、Webargs和APISpec,一直到Flask-apispec。但是整个发展过程中没有出现一个足够好的能够对标DRF的Flask REST Framework。 而到这个阶段,Flask的缺点其实也暴露了。 Flask本来的优点是灵活性和极简主义,但这意味着很多很多组件需要自己造,这个要不然需要公司够大专门有开发者开发和维护,要不然得个人能力极强,否则插件很难达到生产级别,这就造成Flask的第三方插件质量层次不齐,且无法保证长期维护。就像我上面说的那些库,现在来看,其中已经很多不再维护了。 所以即便是今天,你想用Flask构建一个API服务,还是要东拼西凑各个组件,其中某些组件有些没及时更新的地方要自己动手解决,这对于老手来说还好,对于新人来说很痛苦,尤其是你想要应用现在最新的实践方案和理念,只能望而兴叹。 Asyncio生态 从Python3.5开始,asyncio已经是未来的趋势了。所以开始出现了一些原生支持asyncio的Web框架,如aiohttp、Starlette和sanic。 这个时候Flask并不想接受改变,社区迟迟的不加入aio的支持,另外Flask原作者也去写rust了,把项目交给了2个维护者(现在只剩一个人了)。 而用于构架API服务的项目例如apistar,molten。它们都给FastAPI的带来了设计灵感。 FastAPI 接着就是诞生FastAPI了。作者本来也是想找到一个好的解决方案,但是以上种种都是自己的问题或者说局限性,所以作者就造了这个轮子。 FastAPI为什么能成为统治者 这篇文章的核心部分啦,这些理由也是为什么FastAPI会替代Flask的原因。 异步设计 在Flask的那个时代,代码执行是单线程、同步的,这意味着要依次处理请求,前一个请求完成前,其他请求消耗在等待 I/O 操作上。而asyncio是最好的解决方案,它让I/O成为异步操作,无需等待任务完成即可获取任务结果并继续处理其他任务请求。 而FastAPI天生支持并发和异步代码,代码写对了就可以在效率上达到极致,所以它被认为是目前最快的Python框架,效率和NodeJS或Go接近。当速度和性能至关重要时,FastAPI 是最佳选择。 使用Pydantic做用户数据验证 […]
-
dev-ide[转]
推荐轻量级C++/C IDE | dev C++凉了怎么办 以下是碎碎念 (●’◡’●)ノ 最近又开始写C++,我电脑用了好久了,并且只有8G的运行内存,每次打开VS2019都是卡卡卡卡卡卡……这就让我怀念起各种轻量级IDE了。想当年我真的是用过了各种乱七八糟的学生入门编译器,比如eclipse,Code Blocks,VC6.0,Dev C++之类的。其中最简便的就是dev c++了。但是有个坏消息,我用的那个dev c++早在2015年就停止维护了。怪不得我当时用dev c++没办法调试呢,一调试就闪退,导致我一度怀疑自己的垃圾电脑,最后无奈转战VS2010了,后来又VS2017,VS2019……再后来我还捣鼓着用VS code写C++,想了解的看这里:超详细!怎么用VS Code写C/C++。(╯ ̄Д ̄)╯╘═╛ 但是都很麻烦。知道最近我发现,虽然dev c++ 死了,但是他的子孙后代还活着!我又行了!(๑•̀ㅂ•́)و✧😏 dev c++发展历史:原开发公司 Bloodshed 在2011年发布了 v4.9.9.2 后停止开发 。独立开发者 Orwelldevcpp 继续更新,2016年发布了最终版本 v5.11之后停止更新。但是之后还是有人继续了dev c++的意志!继续在开发。所以我今天挨个下载了试试,顺手做个测评。 正文直接看这里。 小熊猫Dev-C++,吐血推荐! 国内开发者 royqh1979 开发的版本小熊猫Dev-C++ (原名Dev C++ 2020)。下载地址:https://royqh.net/devcpp/download 使用感受: 其实可以更换编辑框那块的主题,但是不能换整体的主题,编辑框是黑的但是工具栏是白的看起来就很怪异。所以我还是使用了黑+黑 有代码提示,用起来十分流畅,还有自动语法检查 调试功能也和vs使用感一样好 总结就是除了丑点哪里都好。(我就从界面和编译调试来说说,毕竟其他功能我也用不太到,写大项目我还得用VS) Embarcadero Dev-C++ 国外开发者 FMXExpress 等人在 Embarcadero 公司支持下继续开发的 Embarcadero Dev-C++。下载地址:https://github.com/Embarcadero/Dev-Cpp/releases 使用感受: 图标变红的了 像老版本一样,没有代码提示,只有简单的括号补全之类的 但是开发了新主题,可以用dark […]
-
BCB和Delphi的互用
原创作者sun28 BCB和Delphi互用是很方便的。特别是在BCB中使用Delphi程序,有时候几乎什么都不用改就可以使用。众多C++程序员一直希望Borland公司能够将VCL用C++改写,就现在地情况来看这个愿望很难有实现的一天。我不知道Borland公司是否有修改的打算,但BCB和Delphi互用的这一特性一直是Borland公司引以为傲的一点之一。从其员工的文章中就可以看出这一点。这也是使用BCB和Delphi的好处之一,因为可以进行代码共享,减少了很多重复性的工作,这无疑是一种创举。也正是这一功能使得程序员在工作的时候可以随意地选择工具(BCB或Delphi)。 BCB和Delphi的特点: Delphi能够最大限度的让程序员容易的生成性能很高的、功能强大的组件、应用程序和对象。 BCB允许程序员运用以灵活,巧妙,功能强大而闻名的C++语言编写程序。 BCB和Delphi代码共享的好处: 程序员可以随意地选择适用的工具(BCB或Delphi)进行编程。BCB和Delphi之间的代码共享让程序员不用担心代码是用什么工具编写的。也不用担心一个工具中编写的代码会不会不别另一个工具所认同。而是集中精力用最快的方法去建立你解决问题的模式。然后在BCB或是Delphi中编译。在BCB中使用Delphi比在Delphi中使用BCB更容易,但她们之间的代码在一定程度上都是可以互用的。 BCB和Delphi的代码共享,促进了代码的重复利用。C++和Pascal有很多共性,使得她们共享代码成为可能。C++编译并不比Pascal快。相反由于BCB中使用的是Pascal编写的VCL,因此BCB生成的应用程序比用Delphi生成的应用程序要稍微大一点。当然这一点在今天来说已经无关紧要。 Delphi使用非常简单,语法简单让程序员更容易理解。这使得公司里的新手可以快速的上手,投入到项目中去。参与项目的程序员可以同时使用BCB和Delphi工作。 由于Delphi简单易使,因此非常适用于一些时间要求紧迫的项目。即使你是使用C++的老手,你也可以在时间紧迫的时候选择Delphi来编制程序。然后你也可以再用BCB来编译他们,如果你想这样干的话。这并不会增加你的工作量。 在BCB中可用的Delphi代码 代码形式 说明 Delphi源代码单元和对象 直接编译 Delphi Form 有的版本可以直接编译,有的需要手工改动 Delphi中的函数,方法,结构等 一般情况下可直接编译 Delphi组件 一般情况下可直接编译 Delphi包 直接编译 Delphi生成的COM,DLL,ActiveX,OLE直接编译 Delphi生成的Obj,lib文件 直接编译 在Delphi中可用的BCB代码 代码形式 说明 BCB源代码单元和对象 需要手工改动 BCB Form 需要手工改动 BCB中的函数,方法,结构等 需要手工改动 BCB组件 需要手工改动 BCB包 ????–没试过! BCB生成的COM,DLL,ActiveX,OLE直接编译,代码共享的主要方式 BCB生成的Obj,lib文件 一定条件下可以,比较麻烦 将Delphi代码变为BCB代码 有时Delphi应用程序与C++ Builder应用程序可能需要相互转换。这种转换虽然费时,但并不困难(顺便说一句,进行转换时,我将Delphi与C++ Builder同时运行)。这里只想介绍将Delphi变为C++Builder的过程,反过来也差别不大。将Delphi变为C++ Builder主要有两步。第一步是将Delphi应用程序窗体复制到C++ Builder项目中,第二步是修改Delphi代码。一般情况下这都是没有必要的,除非你想改写为C++代码。下面详细介绍这两个步骤。: 首先要复制Delphi窗体到C++ Builder应用程序中。Delphi窗体与C++ Builder窗体使用相同的基本格式,但至少有一大差别。显然,窗体文件包含窗体本身和窗体上每个构件的尺寸和位置。但窗体文件中也还包含事件信息。具体地说,窗体文件包括窗体及其构件所建事件处理器的描述。在Delphi窗体文件中,事件引用的事件处理器是Delphi方法,而在C++ Builder窗体文件中,事件指向C++ Builder事件处理器。自然,要删除Pascal引用才能在C++ […]
-
便捷ddns
本文将介绍如何使用西部数码的API实现DDNS功能,使您的域名始终指向您的动态IP地址。API介绍:接口地址 https://api.west.cn/API/v2/domain/dns/接口支持两种认证方式1、域名级认证(仅单域名)支持参数 act=dnsrec.update&domain=指定域名&apidomainkey=域名密钥&hostname=完整子域名&record_value=设置的IP域名KEY获取方法,如下图所示,进入管理中心-域名管理-点击域名-右侧上方ApiKey 点击后复制 2、用户级认证 (支持管理多域名)支持参数 act=dnsrec.update&username=用户名&apikey=用户密钥&domain=指定域名&hostname=完整子域名&record_value=设置的IP用户KEY获取 https://www.west.cn/manager/API/APIconfig.asp注意:dnsrec.update接口在更新解析时会删除存在的a记录重新添加,其他api功能可参看 域名API接口文档使用示例:1、群晖NAS先添加自定义服务商服务供应商: westQuery URL: https://api.west.cn/API/v2/domain/dns/?act=dnsrec.update&domain=__USERNAME__&hostname=__HOSTNAME__&record_value=__MYIP__&apidomainkey=__PASSWORD__新增DDNS,选择west 服务商,按截图添加相应的信息 注意:custom 模式下,您需要先在域名解析中添加一条 test.domain.com 的A记录解析。 关于西部数码的域名实现DDNS功能,有不清楚的可以直接通过我司官网在线咨询或提交工单,专业人员将为您解答。
-
传奇源码对于素材处理
这个代码,要说好呢,还是有很多的可以学习的地方的,不过很多地方也是实现得比较粗糙。 要对真彩色支持,首先要了解到: 1、它是16位增强色的,是没有调色板的。具体原理后述。 2、它的素材也是针对增强色设计的,字节可直接用于增强色模式,不可直接用于真彩色模式。 认识到了这两点,基本知道该怎么做了。 先说说增强色模式,现在一般的传奇3私服,会提供一个登录器,登录器除了IP代理之外,还有一个作用就是在运行程序时,把电脑设置成增强色模式,不然按现代的机器,真彩色模式运行,把增强色的数据直接当成rgb颜色渲染,会花屏。 增强色用2个字节(WORD)表示一个颜色,r分量占5位,g分量占6位,b分量占5位,共计16位。 因此每个分量有一个位掩码和一个位移码,对这个WORD数据作用掩码和位移,就可以取出对应的分量的颜色值。当电脑在增强色模式下时,这个操作是自动进行的。 取出rgb分量,还是不能将其用于表示rgb,原因是精度不一样导致的数据单位不一样。 真彩色中,一个分量是一个字节,即8位,而增强色中,一个分量是5或者6位。因此,需要做一个缩放。 例如,红色,在真彩色中,r分量是0xff,而在增强色中,r是二进制11111。 因此,r和b分量需要乘以8,g分量需要乘以4。然后,就可以组合成rgb真彩色了。 因为程序的素材本身就不是真彩色的,因此,我们只需要对surface的操作进行真彩色的支持即可。 首先dx设备要设置成32位深度的,然后,对surface的取色彩操作,要认为是直接在取真彩色的数据,并且在取出计算分量时,相应的要除以8,或4,缩放到增强色的空间。对surface的写入色彩操作,要认为是在写真彩色数据,所以要先把WORD的增强色变换到DWORD的真彩色rgb,然后在写入。另外,因为色彩深度不一样,对surface的pitch处理时要考虑到,因为它是以字节为单位的。