png_path ='...../small_img/0002.jpg'
folder_path = '/..../data/test_in/'
输入一张我们看着长宽高分别是 941长, 181宽的图片 通道数是3(H,W, C) = (941, 181, 3)
图片读入方法
OpenCV读取的图片,直接就是numpy.ndarray格式,无需转换
import cv2
img_cv = cv2.imread(imag_path)
print("img_cv.shape:", img_cv.shape)
# print("img_cv.type:", img_cv.type()) 错误 img_cv.type也错误 numpy.ndarray' object has no attribute 'type'
print("img_cv.type:", type(img_cv))
# img_cv.shape: (181, 941, 3)----->(W, H, C)
# img_cv.type: <class 'numpy.ndarray'>
print(img_cv.size)
# 510963 # 是181*941*3
# 显示图片
cv2.imshow('Image', img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 请注意,在使用imshow()函数时,图片会在一个窗口中显示。waitKey(0)用于等待用户按下任## 意键后关闭图像窗口,而destroyAllWindows()用于关闭所有打开的窗口。
# 注意:在某些操作系统或环境下,可能会出现显示窗口无法正常工作或闪退的问题。这通常涉及## 图形库的设置或可能需要调整一些参数来适应特定的显示方式。
# 保存图像
cv2.imwrite('/path/output_image.jpg', img_cv)
下面读入之后变成了四通道
scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,读取的数据正好是numpy.ndarray格式
import skimage.io as io
img_io = io.imread(png_path)
print("img_io :",img_io .shape) #
print("img_io :",type(img_io)) #
# img_io : (181, 941, 4)
# img_io : <class 'numpy.ndarray'>
print(img_io.size) # 681284 ===181*941*4
利用matplotlib.pyplot读取的图片,同样也是直接就生成了数组格式
import matplotlib.pyplot as plt
img_plt = plt.imread(dirpath)
print("img_plt :",img_plt .shape)
print("img_plt :",type(img_plt ))
# img_mpig : (181, 941, 4)
# img_mpig : <class 'numpy.ndarray'>
print(img_plt.size) # 681284 ===181*941*4
plt.imshow(img_plt , cmap=plt.cm.binary)
plt.show()
显示的图片是:
img_plt = plt.imread(png_path)[:,:,:3] # 仅保留前三个通道(R、G、B),丢弃 Alpha 通道
print("img_plt:", img_plt.shape)
利用matplotlib.image读取的图片,直接就生成了数组格式
import matplotlib.image as mpig
img_mpig = mpig.imread(dirpath)#读取数据
print("img_mpig :",img_mpig .shape)
print("img_mpig :",type(img_mpig ))
# img_mpig : (181, 941, 4)
# img_mpig : <class 'numpy.ndarray'>
print(img_mpig.size) # 681284 ===181*941*4
PIL读取的图片并不是直接的numpy.ndarray格式,需要进行转换
from PIL import Image
import numpy as np
img_PIL = Image.open(png_path)
print("img_PIL:",type(img_PIL)) # img_PIL: <class 'PIL.PngImagePlugin.PngImageFile'>
#将图片转换成np.ndarray格式
img_PIL = np.array(img_PIL)
print("img_PIL:",img_PIL.shape) # img_PIL: (181, 941, 4)
print("img_PIL:",img_PIL.size) # img_PIL: (941, 181)==(H,W)
print("img_PIL:",type(img_PIL))
# img_PIL: <class 'numpy.ndarray'>
常见的cv2,matplotlib.pyplot, scikit-image读入之后都是一个narray数组的形式,np.shape = (W, H, C)
PIL读入之后不是narray,PIL.shape = (H, W, C)
cv2读入通道数不变,其余的会变