前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python我刚写六行代码就出了个惊天BUG

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

作者头像
OpenCV学堂
发布2021-02-05 09:53:03
6250
发布2021-02-05 09:53:03
举报
文章被收录于专栏:贾志刚-OpenCV学堂
引子

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

代码语言:javascript
复制
image[image > t] = maxval
image[image <= t] = 0

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

代码语言:javascript
复制
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就一片白色。我测试了几张图像之后感觉有点怀疑人生了,逻辑这么好的代码,居然不正确执行!

真相让我崩溃

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

代码语言:javascript
复制
test = np.zeros((8, 8), 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<T]=255,居然就全部255,当然都是白色了。智商受到了碾压!后来我还想起了很久以前,我从github上面下载有个别人的项目,他的代码里面也有类似的写法,我记得我当时调试发现这段代码不工作,因为当时项目代码很长,我就保存图像发现不正确,就用opencv-python的cv.threshod函数把它替换了!我晕!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档