同是负值像素,为何在matplotlib和opencv上显示不一样?
图2 opencv画图
直接用cv2.imshow显示,是乌漆嘛黑一片
图3 matplotlib画图
而在matplotlib上却可以正常显示,好家伙,那问题来了,为啥会不一致呢,负值像素在matplotlib上是怎么显示的呢,opencv怎样才可以显示正常呢?
// An highlighted block
dimg = abs(dimg)
dimg = (np.maximum(dimg,0) / dimg.max()) * 255.0
dimg = np.uint8(dimg)
// An highlighted block
dimg[dimg < 0] = 0
dimg = (np.maximum(dimg,0) / dimg.max()) * 255.0
dimg = np.uint8(dimg)
这是我想要的结果,也就是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)
由于图像像素值为负数,不仅影响图像效果,还影响opencv的其它调包操作,作为一个专业调包侠,这是不可容忍的。