首页
学习
活动
专区
圈层
工具
发布

OpenCV论道:为什么我的伽马校正函数只有一行?

大家好,又见面了,我是你们的朋友全栈君。...最近在用 OpenCV 识别棋盘棋子,基本的思路是这样的:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净的棋盘;识别棋盘,标定位置...就是提升图像的暗部细节。这与加曝处理是不一样的,加曝一般不区分图像的暗部和亮部。...奇怪的是,我在网上搜到的伽马校正函数看起来都很复杂,即便是 python 写的,也都得十几行甚至几十行,可我写的伽马校正函数只有一行。为什么会这样呢?是我理解的不对吗?...、伽马校正(gamma=2)的灰度二值化效果、伽马校正(gamma=3)的灰度二值化效果: 对于彩色图片,这个伽马校正函数依然有效。

1.7K20

记录我在Github的第一次PR合并心血历程

有一天下午, 公司的后端大佬问我有没时间,他参与的一个开源项目,有个Issues想让我试试 这个Issues是这样的 什么意思那?...其实当初我是不想接的,因为目前团队只有我一个前端,所有大活小活都是我再做,而且还有很多东西要学习.当初我的心里是拒绝的,当然我也怕自己没处理好,怕被笑话.hahah.......虽然提交到github无数次代码了, 但真正的给大项目提PR却一次都没有. 于是我先用四天审了审题目. 对 没错是四天 距今19天前,我答应他 我会修复好它的,放心吧....然后我审了审题, 既然是可以选择预设的选项, 那么预设都有那些选项那?...这个Issues里并没有提到,于是我就不太情愿地问那个叫做leecalcote的人,艾特他.用我蹩脚的英语 然后这为大佬 当天就回复给我了. 比我提个问他要四天的效率高很多啊.

58220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript调试指南:为什么我的代码没有运行?

    JavaScript调试指南:为什么我的代码没有运行? 引言 在Web开发中,JavaScript是构建动态网页的核心技术之一。...然而,许多初学者常常遇到一个问题:“为什么我的JavaScript代码没有运行?” 有时候,代码看似正确,但页面上没有任何反应,导致开发者困惑。...但实际上,这段代码确实运行了,只是用户可能没有看到预期的输出。为什么会这样? 2. 为什么代码看似“没运行”?...进阶优化:事件驱动执行 原代码在页面加载时立即执行,但更常见的做法是通过事件触发(如按钮点击)。...逐步调试(console.log、debugger)是解决问题的关键。 希望本文能帮助开发者更高效地调试JavaScript代码,减少“为什么没运行?”的困扰!

    23710

    为什么我写不出面向对象的代码

    ” 那么上面的案例代码也有抽象,也有封装,为什么还是算面向过程思维呢。 那么什么是面向对象呢?...观察者模式 因此我们可以抽象为: 功能A运行,触发了功能B的运行。...关于DDD领域驱动设计,推荐书籍: “《领域驱动设计:软件核心复杂性应对之道》 《实现领域驱动设计》 ” 为什么我们在使用贫血模型 看了上面的代码,我们可能会疑问:我使用贫血模型开发挺好的啊?...因此我总结为什么人们更愿意使用贫血模型呢: “ 充血模型相对贫血模型存在一定的设计难度,你需要多花时间思考哪些是对象本身的行为 面向过程的编程思想根深蒂固,很难改变 对代码没有太大负责态度,认为怎么简单怎么来...那么建议你多做一些的思考: 1.我的代码是不是面向对象的代码 2.我的代码设计是否遵循 高内聚,低耦合的设计标准 3.我的代码是否遵循设计原则,如单一职责原则,开闭原则等 4. ...

    2.1K20

    我在优化代码时学到的那些事

    大学时我总以为写代码就是告诉电脑一步步该怎么做。等到真正开始做底层开发,才意识到现代编译器简直就是个有魔法的黑盒子。调试一个性能问题时,我发现编译器把我写的20多行代码优化成了只有5条汇编指令!...好家伙,它偷偷替我做了这么多工作:常量折叠:让编译器替你算数学还记得我第一次看反汇编结果时的震惊 - 我代码里的width * 800 + height * 600直接变成了一个硬编码的数字。...编译器后续的所有优化都是在这棵"树"上进行手术。静态单赋值(SSA):变量的"一夫一妻制"第一次接触SSA形式时,我的脑袋都大了。它的核心理念是:每个变量只被赋值一次。这什么意思呢?...出过几次bug后,我学会了在科学计算代码里避免使用它。真实故事:我是如何修复渲染引擎的回到开头说的那次性能优化。我们的渲染引擎有个着色器编译环节特别慢。...理解它的工作原理,能帮助你:写出对编译器友好的代码知道何时依赖自动优化,何时手动介入更容易找出性能瓶颈如果有一天你发现自己在研究汇编代码,不要害怕 - 欢迎来到优化的兔子洞!

    19100

    为什么我在公司里访问不了家里的电脑?

    上篇文章「为什么我们家里的IP都是192.168开头的?」提到,因为IPv4地址有限,最大42亿个。...IP报头里含有发送和接收IP地址 但是我们家里的局域网内,基本上都用192.168.xx.xx这样的私有IP。 如果我们在发送网络包的时候,这么填。对方在回数据包的时候该怎么回?...那这么说只有用到端口的网络协议才能被NAT识别出来并转发? 但这怎么解释ping命令?ping基于ICMP协议,而ICMP协议报文里并不带端口信息。我依然可以正常的ping通公网机器并收到回包。...为什么我在公司里访问不了家里的电脑? 那是因为家里的电脑在局域网内,局域网和广域网之间有个NAT路由器。由于NAT路由器的存在,外网服务无法主动连通局域网内的电脑。...最后留个问题,有了NAT之后,原本并不富裕的IPv4地址突然就变得非常够用了。 那我们为什么还需要IPv6? 另外IPv6号称地址多到每粒沙子都能拥有自己的IP地址,那我们还需要NAT吗?

    3.7K10

    为什么if-else会影响我的代码的复杂度

    关于if-else的争议 我之前写了一篇文章《我用规则引擎消除if语句,提高了代码的可扩展性》,这篇文章我想阐述的观点是复杂的if语句可能会影响代码的阅读和代码的扩展性,会将非业务的条件逻辑与业务逻辑混合在一起...从软件设计角度讲,代码中存在过多的 if-else 往往意味着这段代码违反了违反单一职责原则和开闭原则。因为在实际的项目中,需求往往是不断变化的,新需求也层出不穷。所以,软件系统的扩展性是非常重要的。...即使在代码还在起步阶段,我们也要能够看到将来代码发展的趋势。 真的不要觉得设计代码是一件费时费力的事情,到了多次项目迭代后,我们会发现好的设计可以提高工作效率和代码质量。...一些经验老到的开发可能一开始就会预料到这种场景,在编码初期就开始思考如何设计代码了。作为一般开发者来说,我们不必如此,我们可以在版本多次迭代后,当问题显露出来时,思考这些问题也是可以的。...很多项目其实会有重构环节,我们在重构时思考我觉得也不晚。 关于减少复杂if-else的方法,推荐大家看看这些文章: “[if-else语句太多了?

    2.5K10

    我的代码背叛了我?为什么 a=1, b=2,最后x和y都等于0?

    随着多核架构的普及,并发编程已成为开发者不可或缺的核心技能。在学习过程中,开发者常会遇到这样的困惑:正确编写的单线程代码,为何在并发环境下可能瞬间失效?看似有序的语句执行后,为何结果却混乱不堪?...本文以Java语言为例,剖析共享数据在并发环境中的传播机制、指令执行的有序性保障,以及原子操作的实现原理,从而揭示多线程程序从代码到处理器执行的底层逻辑。...同时,通过剖析工程实践中常见的并发异常,并追溯其根本原因,帮助读者构建对并发编程本质的系统理解。并发之谜:为何我的代码背叛了我?...在并发编程中,共享变量是指能够被多个线程同时访问的变量,如全局变量、静态变量或对象的实例成员变量。这些变量通常存储在堆内存中,而非线程私有的栈内存中,因为堆内存对所有线程可见。...那么就可以保证对共享变量的操作,在并发情况下是线程安全的。在Java语言中,是通过volatile关键字实现。

    20910

    还记得当初为什么选择计算机?我的代码人生旅程‍

    还记得当初为什么选择计算机?我的代码人生旅程‍ 摘要 在这篇博客中,我将探讨计算机科学的魅力、编程的乐趣和技术对个人成长的影响。...引言 大家好,我是猫头虎博主‍,今天和大家分享我的计算机之旅。自从我选择了计算机,我的生活就像是打开了一扇通往未知世界的大门。让我们一起探索这个充满可能的领域吧! 1. 我为什么选择计算机行业?...1.1 初识编程的那份魔力 ✨ 最初接触计算机是在高中的时候,那时候的我被编程的魔力深深吸引。我记得第一次写出Hello, World!时的兴奋,就像是一个小巫师学会了第一个魔法咒语。...我现在还从事计算机相关行业吗? 2.1 持续的热情与挑战 没错,我依然热爱这个行业。现在,我不仅仅是编写代码,还在探索人工智能、大数据等前沿技术。每一天都充满了新的挑战和机遇。...2.2 从学习者到分享者 我开始撰写技术博客,分享我在这个领域的所学所感。我希望我的经验能够帮助到正如当年的我一样的编程初学者。 3. 计算机对我的人生道路有何帮助?

    39810

    同事看了我的代码惊呼:居然是这么在Unity中用单例的

    ❤ 一、前言 今天,同事问我:“在Unity中怎么用单例呀” 然后我就把我写的代码甩过去了。...同事:“哦,原来是这么用的,你来给我演示一下吧” ❤ 二、单例模式介绍 首先要了解,单例模式是一种常用的软件设计模式,定义是单例对象的类只能允许一个实例存在,在许多时候整个系统只需要拥有一个全局对象...单例模式的结构图如下图所示: 那么,单例模式在Unity中又有那些应用场景呢: 1、在使用Unity开发项目的时候,经常会遇到需要一个管理类来管理一些全局的变量和方法,比如GameManager...假设有以下需求: 1、整个项目中有且只有一个DataManager单例对象 2、在DataManager单例对象中,需要去读取文档的数据,并且保存下载 3、在切换场景的时候DataManager对象不能被销毁...4、在不同的脚本中可以读取到DataManager单例对象读取的值 下面我们就来一步步实现单例对象下的DataManager。

    1.2K10

    为什么同样的代码我就是跑不起来,同事却能跑起来?

    不知道小伙伴们有没有遇到过标题的问题,明明同样的一套代码,在自己本地就是运行不起来,或者说在本地只改了一个无关痛痒的代码,看上去人畜无害,结果就报各种乱七八糟的错误,但是同事却能运行的好好的。...检查了各种情况都没有问题,搞的都要怀疑人生了。 阿粉就遇到过,特别是在刚入职场的时候,有几次遇到这样的问题,还差点搞起来乌龙。...这种情况下其实你们的代码版本是不一样的,并不是标题提到的一样的代码,但是很多时候自己内心会以为代码是一样的。...这种情况下如果回滚掉这段人畜无害的代码过后能正确运行,那么不要怀疑,就是这段看上去人畜无害的代码导致的。...本地的 JDK 版本是否正确;链接的公司网络是否正确,有的公司会严格区别办公网络和访客网络;Maven 版本是否正确,如果是新拉取的代码库可能是网络问题导致很多依赖没有下载成功,因为第一次加载项目依赖还是比较费时的

    2.5K30

    为什么我代码里面选择top1000的sd基因绘制热图呢

    实际上写完了这个全网最好的差异分析代码:免费的数据分析付费的成品代码 我就可以收工用来,但是永远不能低估粉丝的疑惑数量,任何一个细节都会被拿出来剖析。...比如代码里面我挑选了top1000的sd基因绘制热图,然后就可以分辨出来自己处理的数据集里面的样本分组是否合理啦。其实这个热图差不多等价于PCA分析的图,被我称为表达矩阵下游分析标准3图!...为什么挑选top1000的sd基因绘制热图 我这个热图是为了说明本分组是否合理,就是看样本的距离,这个时候你如果需要理解距离,那么你需要学习非常多细节知识。...和npc两个分组非常明显的差异 为什么选择top1000的sd基因绘制热图其实就是个人爱好,你可以探索top500,1000,2000,5000是否有区别。...top5000= cutree(p4$tree_col,2), group_list=group_list) 这个时候,你会发现,好像不一样,我修改层次聚类的类别数量

    2.1K10

    python3百度指数抓取 前言:代码在我的github上面:

    install pyocr selenium2.45 Chrome47.0.2526.106 m or Firebox32.0.1 chromedriver.exe 图像识别验证码请参考我的博客...: python图像识别--验证码 selenium用法请参考我的博客: python之selenium 进入百度指数需要登陆,登陆的账号密码写在文本account里面: ?...登陆过后需要打开新的窗口,也就是打开百度指数,并且切换窗口,在selenium用: # 新开一个窗口,通过执行js来新开一个窗口 js = 'window.open("http://index.baidu.com...下面的思路就是: 将整个屏幕截图下来 打开截图用上面得到的这个坐标rangle进行裁剪 但是最后裁剪出来的是上面的那个黑框,我想要的效果是: ?...代码在我的github上面: TTyb

    1.5K30

    在别人写的代码上做修改我是这样保证正确性

    9年来我再也没有接手可以毫无负担,直接推倒重写的代码。就算有,不搞清楚以前的逻辑和背景,就直接抛掉这些历史包袱是不对的。在修改别人写的代码的时候,我们需要信奉黑格尔的名言:“存在即合理”。...一定要弄清楚之前这样编写代码是出于什么样的考虑。 项目背景 这段时间我们团队在修改之前的一个功能。在我接触到这个项目的时候,设计方案已经被讨论了多次,已经到了详细设计的阶段。...在我视角需求是这样的:就是一个查询接口的改造,改造前代码逻辑被前人做复杂了,这次一些从下游拿数据来拼接返回值的逻辑可以改成从下游(数据基础服务)简单取部分数据,另外一部分写死。...HR小姐姐说不是单单问我,要问我们在场所有人一个问题:“代码都读过了,为什么有些人还对逻辑不清楚?”其中一个架构师回答到:“就是你上学的时候读鲁迅的书和现在读鲁迅的书的区别。”...其实我想说:“治学三境界了解一下”,但是想想为这句话我要解释两分钟诗词,在述职评分现场,肉眼可见的在拽,岂不是在给自己减分。所以我选择了沉默。这里自己的地盘提一嘴。

    1.7K20

    我,开发者,在元宇宙里有一行自己的代码!

    但对研究者而言,想要上手研究扩展现实领域,还需要耗费不少时间、精力去解决繁琐的环境配置、不同代码库的底层规范以及代码库之间串接的问题。...从整体上看,XR领域的底层有各式各样的传感器和不同的操作系统,上层有丰富的应用比如AR/VR、数字孪生、数字人等等,OpenXRLab致力于在底层的硬件和上层的操作系统间架起一座桥梁,供研究员方便迭代新的算法...作为AR领域的基础设施,团队提供了在iPhone端可实时交互的移动端应用。...XRLocalization采用模块化的设计,并提供了一套层次化视觉定位算法,使其能够在大尺度场景下实现高效、精准且鲁棒的定位。...团队表示,欢迎任何形式的贡献,可以在wishlist中添加想要复现的算法,可以在issue中报告问题,也可以PR提交修改,甚至还可以加入他们。

    96230

    为什么我的Spring Boot自定义配置项在IDE里面不会自动提示?

    一、背景 官方提供的spring boot starter的配置项,我们用IDE配置的时候一般都有自动提示的,如下图所示 而我们自己自定义的配置却没有,对开发非常不友好容易打错配置,那这个是怎样实现的呢...二、提示原理 IDE是通过读取配置信息的元数据而实现自动提示的,而元数据在目录META-INF中的spring-configuration-metadata.json 或者 additional-spring-configuration-metadata.json...三、实现自动提示 以我这个自己开发的starter中的自定义配置文件为例,如果自己手动创建这些元数据的话工作量比较大,使用IDEA的话有自动生成功能 3.1....引入依赖spring-boot-configuration-processor 在zlt-swagger2-spring-boot-starter工程中添加以下jar包 ...重新编译项目 项目在重新编译后就会自动生成spring-configuration-metadata.json文件 四、测试 自定义的swagger配置已经能自动提示了 参考资料 https:/

    3.6K20

    谈 DevOps 平台实施:我在本地跑明明成功的,为什么在你平台跑就报错?

    我在本地跑明明成功的,为什么在你平台跑就报错? 用户在 Jenkins 上跑构建时,失败了,把日志截图给我看,如下图: ?...当用户业务开发比较急的时候,他们还会说本文标题中的那句话。有些抱怨的意思。我都已经习惯了。 出现这样的情况,我总结大概会有以下原因: 用户对于 Maven 这类构建工具不熟悉。...我觉得 DevOps 平台是不是可以直截了当地告诉用户: xxx 依赖在 Nexus 仓库(maven.abc.com)中没有找到,请您先 deploy 该依赖到 Nexus 仓库后,再执行此任务。...如果能检测到缺少的依赖放在哪个代码仓库就更好了。因为这样,就可以提示用户直接到该代码仓库的 deploy 了。 这样的技术,我称为依赖AI管理技术(笑)。当然,这样的技术,应该可以应用于所有的语言。...同时,我们将这些数据(依赖管理失误)统计起来,就可以看出一个团队在依赖管理方面的能力表现了,进而可以有效的对团队进行培训,以提高相应的能力。

    98710

    从开发者到讲师,我第一次教跨行业AI写代码的心路历程

    最近经历了人生第一次当老师的经历,想和大家分享一下这段既紧张又有趣的经历。意外的教学机会事情的起因其实特别突然。那天我正在群里和几个小伙伴交流技术问题,聊着聊着就谈到了我平时的技术输出和开源项目。...这时候群里的一位小伙伴突然问我:"晚上有空吗?我这边有个付费辅导的机会,主要是教新手使用 Cursor 写代码,感兴趣不?"说实话,当时我心里咯噔一下。教别人编程?还是跨行业的新手?...该如何控制教学节奏,让完全零基础的学员能跟得上?还好有哪位小伙伴的指导。耐心解答了我的各种疑问。紧张的首秀时刻终于到了约定的时间,打开腾讯会议的那一刻,我的心跳都快了几分。...经验总结如果你也想尝试做技术分享或教学,我的一些小建议:不要怕第一次:每个"老师"都有第一次,重要的是开始以学员为中心:时刻关注学员的接受程度,适时调整节奏多准备实例:实际的案例比空洞的理论更容易理解保持互动...这次经历让我明白,教学不仅是在帮助别人,更是在提升自己。

    10900

    在工具泛滥的时代,我为什么还要做一个“不一样“的工具站

    工具站,早已是红海中的红海。每一个看起来都差不多:输入框、按钮、输出框,再配上满屏的广告和"立即升级VIP"的弹窗。那我为什么还要做一个?答案很简单:因为我自己需要,而市面上的工具让我不舒服。...太多的弹窗、太多的追踪、太多的"智能推荐"、太多的"会员专享"。我只是想格式化一段JSON,为什么要注册账号?我只是想解码一段Base64,为什么要看三秒广告?...后端返回的JSON是压缩的,看不清结构接口传参需要Base64编码,手动转换太麻烦产品发来一张截图,里面有一段代码,我需要把它提取出来从PDF复制的文本,满是换行符和多余空格,粘贴到代码里就报错这些场景...看到AI火了,就做AI工具看到短视频火了,就做短视频工具看到Web3火了,就做Web3工具追着风口跑,却不知道自己在跑什么。我不想这样。我想做一个有自己身份的超级个体。...我希望通过这个工具站,连接更多有真实需求、有表达欲、有创造力的构建者。我们不是在消费工具,而是在共同创造一种更好的开发体验。六、StrLoom的未来StrLoom现在还很简单,只有四个功能。

    13510
    领券