当前位置:   article > 正文

python学习——深度学习图像读入cv2_python 从图片输入cv2.

python 从图片输入cv2.

在学习VGG16网络及U-Net网络时都涉及到图像的读取。

1.采用cv2读取图像

参考博客:Python各类图像库的图片读写方式总结

OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换

  1. import cv2
  2. import numpy as np
  3. #读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
  4. img = cv2.imread('1.jpg')
  5. cv2.imshow('src',img)
  6. print(img.shape) # (h,w,c)
  7. print(img.size) # 像素总数目
  8. print(img.dtype)
  9. print(img)
  10. # waitKey参数为0的时候窗口不会自动关闭,无限等待按键,假如设为10000,也就是10s,不做任何操作的情况# 下大概15s左右窗口自动关闭
  11. cv2.waitKey()

值得注意的是,opencv读进来的图片已经是一个numpy矩阵了,彩色图片维度是(高度,宽度,通道数)。数据类型是uint8,

注意:opencv对于读进来的图片的通道排列是BGR,而不是主流的RGB!谨记!

PIL读取图片后的像素值是RGB,首先使用PIL读取图片,得到第一个位置的像素值[R,G,B]

  1. from PIL import Image
  2. img = Image.open("1.jpg")
  3. print(img.size)
  4. print(img.getpixel((0,0)))

再使用opencv读取图像,注意其已经是numpy数组,且其img.size为总像素数

  1. import cv2
  2. img = cv2.imread('1.jpg')
  3. print(img.shape)
  4. print(img[0][0])

若要cv2读取完图像也是RGB格式,则有如下几种方法:

  1. # 方法一,直接这样写
  2. img = cv2.imread("1.jpg")[:,:,::-1]
  3. # 或者这样写
  4. img = cv2.imread('1.jpg')
  5. img3=img[:,:,::-1]
  6. # 方法二
  7. img = cv2.imread("1.jpg")
  8. b,g,r=cv2.split(img)
  9. img2=cv2.merge([r,g,b])
  10. print(img2.shape)
  11. print(img2[0][0])
  12. # 方法三
  13. img4=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  14. print(img4.shape)
  15. print(img4[0][0])

对于方法一利用numpy数组切片转化方法,可以这么举例理解:

仿照图片的像素格式,建立一个2行3列的,每个像素有包含RGB3个元素。

分别进行图中所示的4种运算。

执行a[:-1],移除了后面的一行。对于一维数组,后面的一行其实就是最后一个元素,所以这个运算就是移除最后一个元素。

执行a[::-1],上下两行交换了。同样的看成一维数组的话,一行就是一个元素,这个运算其实就是对一个一维数组内的元素前后对调。多维数组可以理解成对对第一个方括号内的每一个元素前后对调。

执行a[:,::-1],每一行中的元素前后交换了。简单理解就是对第二层反括号内的元素前后对调。

执行a[:,:,::-1],这样就好理解了,肯定是对第三层方括号内的元素对调。这也就解释了,对于一个24位深度的图像执行这个操作的话,是对每个像素的RGB进行对调。

对于图像而言,a[::-1],a[:,::-1],a[:,:,::-1]上述的三种方法分别是X轴的镜像,Y轴的镜像,BGR转换为RGB的操作。

 

另一篇参考博文的说法:OpenCV-MAT对象中使用pylab.imshow(img[:,:,::-1])如何实现将第二轴反向

img[:,:,::-1]

中括号中有两个逗号,四个冒号

[:,:,::-1]

第一个冒号——取遍图像的所有行数

第二个冒号——取遍图像的所有列数

第三个和第四个冒号——取遍图像的所有通道数,-1是反向取值

所以,如果一幅300*100的彩色图像,

执行img[:,:,::-1]后行列不变,通道数方向,由R、G、B更改为B、G、R,即第二轴反向

若是执行img[1:4,5:10,1:3:-1]后,第1行到第3行,第5列到第9列,第1通道到第2通道上的数据反向,即——第1行到第3行,第5列到第9列由R、G、B更改为R、B、G

cv2.resize

  1. import cv2
  2. #读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
  3. img = cv2.imread('1.jpg')
  4. cv2.imshow('src',img)
  5. cv2.waitKey(0)
  6. # 该方法将img缩放为32*32尺寸大小的图片
  7. img5=cv2.resize(img,(32,32))
  8. cv2.imshow('src',img5)
  9. cv2.waitKey(0)
  10. # 注意用imshow显示图像要用cv2.waitKey(0),不然显示不出来
  11. # 使用cv2.resize时,参数输入是 宽×高×通道

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/888097?site
推荐阅读
相关标签
  

闽ICP备14008679号