同是负值像素,为何在matplotlib和opencv上显示不一样?

1、问题定位

同是负值像素,为何在matplotlib和opencv上显示不一样?

图一 图像的像素值打印
同是负值像素,为何在matplotlib和opencv上显示不一样?_第1张图片
开始画图对比:

图2 opencv画图
同是负值像素,为何在matplotlib和opencv上显示不一样?_第2张图片
直接用cv2.imshow显示,是乌漆嘛黑一片

图3 matplotlib画图
同是负值像素,为何在matplotlib和opencv上显示不一样?_第3张图片
而在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
同是负值像素,为何在matplotlib和opencv上显示不一样?_第4张图片

2.2、负数变为零,再拉伸(不知是好是坏啊)

// An highlighted block
dimg[dimg < 0] = 0
dimg = (np.maximum(dimg,0) / dimg.max()) * 255.0
dimg = np.uint8(dimg)

图5 尝试结果2
同是负值像素,为何在matplotlib和opencv上显示不一样?_第5张图片

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)

同是负值像素,为何在matplotlib和opencv上显示不一样?_第6张图片

4、结语

由于图像像素值为负数,不仅影响图像效果,还影响opencv的其它调包操作,作为一个专业调包侠,这是不可容忍的。

你可能感兴趣的:(图像处理,matplotlib,opencv,python)