python cv2.imread()几点认识

在探索如何自制遥感云影数据集的过程中,处理图片时遇到了问题,主要出现在cv2.imread()这个函数上。

制作云影图片时,代码中保存了四个通道的信息,imwrite为一个png图片,shape为[512,512,4]。但是在用imread函数读入之后,显示为[512,512,3],原地迷惑了。
之后我就想,会不会除了RGB三个常规通道,另外一个没有读进来。查了下,明白叫alpha通道,检索相关信息,才知道imread()函数有第二个参数,后找到这篇博客
opencv中imread第二个参数的含义
作者罗列了imread函数中第二个参数‘flag’的不同值的不通用法
在这里插入图片描述
评论有人说个别错误,我自己测试了一下,结果如下
在这里插入图片描述
所有不同值都不能以原深度读入。我觉得应该是不对的,但反复测试几遍都是这个结果,目前不知哪儿出了问题。针对保持图片原深度,继续检索,发现了这篇
opencv IMREAD_ANYDEPTH 可读取和保存任意位深度的图片
在这里插入图片描述
将第二个参数的数字换成文字,其实数字-1~4分别对应的就是不同的语句,只是给简化了表达。此方法看上去应该是ok的,但我测试的时候还是只是8位深度的。
另外在搜索过程中,论坛上很多人提到了对于cv2.imread()函数第二个参数的CV_LOAD_IMAGE_ANYDEPTH这种写法,包括上面提到的第一篇博客中也有
在这里插入图片描述
在测试这些语句时,都会报错。注意是
CV_LOAD_IMAGE_ANYDEPTH这种形式会报错,但是
cv2.IMREAD_ANYDEPTH这种形式不会报错。
后来又找到这篇博客
‘CV_LOAD_IMAGE_GRAYSCALE’ is not defined{PY}
在这里插入图片描述
他说这种语句已经被python的cv接口淘汰了。

目前我自己的实践中对于如何保持原位深度还存在问题,不过没涉及到我对于数据集的理解。通过flag=-1能够正确读入alpha通道,进而将代码逻辑顺通,然后看懂了数据集的制作方法。

猜你喜欢

转载自blog.csdn.net/qq_41872271/article/details/106025007