本文主要是介绍同是负值像素,为何在matplotlib和opencv上显示不一样?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、问题定位
同是负值像素,为何在matplotlib和opencv上显示不一样?
图一 图像的像素值打印
开始画图对比:
图2 opencv画图
直接用cv2.imshow显示,是乌漆嘛黑一片
图3 matplotlib画图
而在matplotlib上却可以正常显示,好家伙,那问题来了,为啥会不一致呢,负值像素在matplotlib上是怎么显示的呢,opencv怎样才可以显示正常呢?
2、解决方法尝试
2.1、负数变为正数,再拉伸(暴毙)
// An highlighted block
dimg = abs(dimg)
dimg = (np.maximum(dimg,0) / dimg.max()) * 255.0
dimg = np.uint8(dimg)
图4 尝试结果1
2.2、负数变为零,再拉伸(不知是好是坏啊)
// An highlighted block
dimg[dimg < 0] = 0
dimg = (np.maximum(dimg,0) / dimg.max()) * 255.0
dimg = np.uint8(dimg)
图5 尝试结果2
3、最后实现
这是我想要的结果,也就是opencv和matplotlib相同的结果。
具体实现也很简单,以最小值为零度,先加法拉伸,再拉伸至0-255。
// An highlighted block
min = dimg.min()
dimg -= min
dimg = (np.maximum(dimg,0) / dimg.max()) * 255.0
dimg = np.uint8(dimg)
4、结语
由于图像像素值为负数,不仅影响图像效果,还影响opencv的其它调包操作,作为一个专业调包侠,这是不可容忍的。
这篇关于同是负值像素,为何在matplotlib和opencv上显示不一样?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!