社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

小白学视觉 • 3 年前 • 242 次点击  

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

重磅干货,第一时间送达

 

引子


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

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

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

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

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


一、真相让我崩溃


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

test = np.zeros((88), dtype=np.uint8)
for i in range(8):
    test[i, 0] = i * 32
    test[i, 1] = i * 32
    test[i, 2] = i * 32
    test[i, 3] = i * 32
    test[i, 4] = i * 32
    test[i, 5] = i * 32
    test[i, 6] = i * 32
    test[i, 7] = i * 32
print(test)

test[test > 122.2335] = 0
print("output1\n",test)
test[test <= 122.2335] = 255
print("output2\n", test)

打印输出结果:

我终于破案了!

原来我第一次赋值image[image>T] = 0时候导致没有大于T的了,然后再执行image[image

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

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

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

交流群


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


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129663
 
242 次点击