cv2.imread():读入图片,真没看过这个源代码。特别谢谢这种网络喷子,自己犯错误很难发现。没有他们进步很难。他说的应该对。我在opencv-python文档没看到。
共两个参数,第一个参数为要读入的图片文件名,
第二个参数为如何读取图片,
cv2.IMREAD_COLOR:以灰度模式读入图片,可以用-0表示;
cv2.IMREAD_GRAYSCALE,1:,读入一副彩色图片,可以用1表示;
cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道,可以用2表示。
只看到下面文档。最初我写的-1 0 1,后来改成0,1,2.我也蒙了。
flags Flag that can take values of cv::ImreadModes
也就是说很多模式读取。
做了个简单测试
for i in range(-10,10,1):
tmp = cv2.imread(r"E:\py_code\img_treatment\img\1.jpg",i)
tmp = cv2.resize(tmp,(200,200))
cv2.imshow(f"i = {i}",tmp)
cv2.waitKey()
通过这个例子可以看到当 i =0和i=2时候为‘黑白图’,i=1和i=other时候为彩图。也就是说从表面看来说,只有参数为0,1,2才有意义。
import cv2
import numpy as np
for i in range(-10,10,1):
img = cv2.imread(r"/home/cheng/Documents/practice_py/data/red_rose.jpeg",i)
print(f"当read中的参数为{i}时候,"
f"图像的格式为 {img.shape},数据类型{img.dtype},")
if len(img.shape)==3:
print(f"channel 1 :极值为{np.max(img[:,:,0])}<-->{np.min(img[:,:,0])}",
f"channel 2 :极值为{np.max(img[:,:,1])}<-->{np.min(img[:,:,1])}",
f"channel 3 :极值为{np.max(img[:,:,2])}<-->{np.min(img[:,:,2])}")
elif len(img.shape)==2:
print(f"极值为{np.max(img)}<-->{np.min(img)}")
结果
当read中的参数为-10时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-9时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-8时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-7时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-6时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-5时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-4时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-3时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-2时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为-1时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为0时候,图像的格式为 (720, 1280),数据类型uint8,
极值为255<-->0
当read中的参数为1时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为2时候,图像的格式为 (720, 1280),数据类型uint8,
极值为255<-->0
当read中的参数为3时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为4时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为5时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为6时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为7时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为8时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
当read中的参数为9时候,图像的格式为 (720, 1280, 3),数据类型uint8,
channel 1 :极值为253<-->0 channel 2 :极值为255<-->0 channel 3 :极值为255<-->0
Process finished with exit code 0
都是uint8,只有0和2为灰度图,值域都是0-255(里面有253是因为图片本身的问题)。
最后就是别管了,知道0,1,2有特殊含义就行了,平时读个图片,没啥意义。