关于opencv的imread的一点理解

最近有个同学问我一个这个问题,imread返回的是个什么,他给我截了一张图

image=cv2.imread('F://11.jpg')
print(image)

关于opencv的imread的一点理解_第1张图片
直接把读取的图片输出后为啥是那么多个列表的多层组合,[ [ [ ], [ ] ], [ [ ], [ ] ] ],差不多是这个结构,其实这个很基础,opencv默认读取图片是按照BGR的顺序读取的,每个最内层三个元素的列表代表的就是一个像素的BGR,他之所以不是[ [ ], [ ], [ ], [ ] ]这种结构是因为编译器在输出的时候把图片每一行像素的[B,G,R]合并到了一个列表内然后把每一行再放到另一个空列表内,就有了这样的输出,只是一个小的点,但是做图像的处理你必须明白每个元素的含义,这样才知道该做什么样的处理和别人代码上处理的作用。
你可以把下面这个代码复制下来看看输出效果,一目了然

img=np.zeros((4,3),dtype=np.uint8) #模拟一张照片
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#模拟opencv读取照片Mat
print(img)

还有,经常在图像处理中组合的操作:

image=cv2.imread('F://11.jpg')
img=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
pixel_value=img.reshape(-1,3)

opencv默认读取顺序是BGR这个要记牢,所以你要是需要RGB的顺序可以用cvtColor()函数,利用reshape()函数可以将这个图片的Mat转化成多行3列的列表,每一列分别存储R,G,B的数值,这样就可以分开处理了。其他的一些细节操作就靠各位自己看情况去写了。

你可能感兴趣的:(编程过程出现的问题,opencv,python)