OpenCV-Python我刚写六行代码就出了个惊天BUG

news/2024/7/3 4:59:49

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达0264888adad634d4db007e88cdfac0fc.png

引子

最近一直在用PyQT跟python-opencv做开发,正好需要固定阈值二值化,于是我就随手写下了如下的代码片段:

image[image > t] = maxval
image[image <= t] = 0

这波常规操作我给自己满分,后来别人跟我说可以根据阈值反向分割,就是大于阈值T赋值为0,小于阈值T赋值为maxval于是,我就给它加了个if else操作,代码如下:

if bin_type == 0:image[image > t] = maxvalimage[image <= t] = 0
else:image[image > t] = 0image[image <= t] = 255

感觉这代码写的满分,于是我调试的时候,输入一张灰度图像,只要我选择bin_type=0总是正确执行二值化,只要我输入bin_type=1就一片白色。我测试了几张图像之后感觉有点怀疑人生了,逻辑这么好的代码,居然不正确执行! 

一、真相让我崩溃

这个问题当时让好郁闷,感觉自己智商出问题了!于是我就手动写下了如下代码:

test = np.zeros((8, 8), dtype=np.uint8)
for i in range(8):test[i, 0] = i * 32test[i, 1] = i * 32test[i, 2] = i * 32test[i, 3] = i * 32test[i, 4] = i * 32test[i, 5] = i * 32test[i, 6] = i * 32test[i, 7] = i * 32
print(test)test[test > 122.2335] = 0
print("output1\n",test)
test[test <= 122.2335] = 255
print("output2\n", test)

打印输出结果:

a6b56f983f25ebf7cd9a6e46b7416468.png

我终于破案了!

原来我第一次赋值image[image>T] = 0时候导致没有大于T的了,然后再执行image[image<T]=255,居然就全部255,当然都是白色了。智商受到了碾压!后来我还想起了很久以前,我从github上面下载有个别人的项目,他的代码里面也有类似的写法,我记得我当时调试发现这段代码不工作,因为当时项目代码很长,我就保存图像发现不正确,就用opencv-python的cv.threshod函数把它替换了!我晕!

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

4bef6993392051a43f429180b8b5f495.png

81d070cad3b1e635c841f7ba0a17381c.png


http://lihuaxi.xjx100.cn/news/268214.html

相关文章

tinyproxy代理

Tinyproxy 是一个轻量级的开源 web 代理守护进程&#xff0c;其设计目标是快而小。它适用于需要完整 HTTP 代理特性&#xff0c;但系统资源又不足以运行大型代理的场景&#xff0c;比如嵌入式部署。 Tinyproxy 对小规模网络非常有用&#xff0c;这样的场合下大型代理会使系统资…

2020年AI产业报告:100个岗位抢1个人,计算机视觉成最大缺口

“你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间&#xff0c;这是我们最战战兢兢的心情。但是显然&#xff0c;有些人体会不了。这份行业数据&#xff0c;让笔者“柠檬”了。1疫情下&#xff0c;有的公司宣布破产有的公司增长413%疫情期间&#xff0c;人工智能的价值…

Scrapy框架模拟Github网站登陆

1. 以往的模拟登陆的方法 1.1 requests模块是如何实现模拟登陆的&#xff1f; 直接携带cookies请求页面找url地址&#xff0c;发送post请求存储cookie 1.2 selenium是如何模拟登陆的&#xff1f; 找到对应的input标签&#xff0c;输入文本点击登陆 1.3 scrapy的模拟登陆 直…

metasploit-smb扫描获取系统信息

1.msfconsle 2.use auxiliary/scanner/smb/smb_version 3. msf auxiliary(smb_version) > set RHOSTS 172.16.62.1-200RHOSTS > 172.16.62.1-200msf auxiliary(smb_version) > set THREADS 100THREADS > 100msf auxiliary(smb_version) > run 4.扫描结果&#x…

微信支付服务器demo,集成微信支付(附带demo)

首先忽略掉申请AppKey的步骤&#xff0c;直接从集成开始1、cocopods集成SDKpod WechatOpenSDK2、添加依赖库SystemConfiguration.framework, libz.tbd, libsqlite3.0.tbd, libc.tbd, Security.framework, CoreTelephony.framework, CFNetwork.framework.3、设置URL Schemes为您…

AI最佳论文都在这里了!(非常全,快领!)

搞AI&#xff0c;很容易进入一个误区&#xff0c;就是只钻研自己的代码是否精进&#xff0c;而没有注意提升自己的阅读能力。实际上&#xff0c;一个专业的学术研究员或者AI研究员可能需要花费几百个小时来阅读论文&#xff0c;阅读论文可以帮助你深入原理&#xff0c;理解AI更…

Webpack系列-第一篇基础杂记

系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的&#xff0c;而Webpack虽然只是一个工具&#xff0c;但内部涉及到非常多的知识&#xff0c;之前一直靠CV来解决问题&#x…

DX11 preprocessor Dynamic shader linkage

&#xff08;参照例子DXSDK sample&#xff1a;DynamicShaderLinkage11&#xff09; 一、preprocessor 实现shader静态分支的经典方法&#xff0c;代码示例如下 shader中(如果显卡不支持DX11&#xff0c;则STATIC_PERMUTE为True)&#xff1a; #if !defined( STATIC_PERMUTE )iB…