目录
前言
一、读取图片代码示例
二、两者区别
1.存储格式不同
2.通道顺序不同
前言
在处理计算机视觉任务过程中,经常会用到Pillow和Opencv来处理数据,本文介绍这两者在处理图片时的不同。
一、读取图片代码示例
Pillow (PIL):Pillow 是一个流行的 Python 图像处理库,可以用来打开、处理和保存多种图像格式。您可以使用以下代码来读取图片:
from PIL import Image
# 打开图像文件
image = Image.open('image.jpg')
# 显示图像
image.show()
OpenCV:OpenCV 是一个计算机视觉库,支持多种图像和视频处理任务。您可以使用以下代码来读取图像:
import cv2
# 读取图像文件
image = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、两者区别
1.存储格式不同
Pillow将图像以PIL(Python Imaging Library)的Image
对象的形式加载到内存中。OpenCV将图像以NumPy数组的形式加载到内存中。
import cv2
path=r'E:\cv_code\ZYH\SenseEarth2020-ChangeDetection-master\data\dataset\train\im1\00003.png'
img1=cv2.imread(path)
img2=Image.open(path)
print(img1)
print("**************")
print(img2)
输出:
通过numpy.array()将PIL数据处理为Numpy数组。
2.通道顺序不同
OpenCV(cv2)在读取图像数据时通常不会按照CHW(通道、高度、宽度)的顺序排列数据,而是按照HWC(高度、宽度、通道)的顺序排列数据。这意味着数据数组的维度通常是(height, width, channels),而不是(channels, height, width)。例如,如果您使用OpenCV读取一张彩色图像,通道顺序通常是BGR(蓝绿红),并且数据的维度将是(height, width, 3),其中3表示三个颜色通道。
Pillow(PIL)库在处理图像时也按照HWC(高度、宽度、通道)的顺序排列数据,而不是CHW(通道、高度、宽度)的顺序。这意味着使用Pillow库读取图像后,数据的维度通常是(height, width, channels)。例如,如果您使用Pillow打开一张彩色图像,通道顺序通常是RGB(红绿蓝),并且数据的维度将是(height, width, 3),其中3表示三个颜色通道。
import cv2
path=r'E:\cv_code\ZYH\SenseEarth2020-ChangeDetection-master\data\dataset\train\im1\00003.png'
img1=cv2.imread(path)
img2=Image.open(path)
img3=np.array(img2)
print(img1)
print("**************")
# print(img1.transpose(2,0,1).shape)
# print(img2)
print(img3)
输出:
[[[ 48 62 55]
[ 53 68 58]
[ 54 68 61]
...
[132 134 129]
[136 136 131]
[134 136 131]]
[[ 43 56 46]
[ 46 61 51]
[ 48 63 53]
...
[133 133 128]
[135 135 130]
[136 136 131]]
[[ 48 61 51]
[ 49 64 54]
[ 50 65 55]
...
[132 132 127]
[134 134 129]
[135 135 130]]
...
[[ 59 72 77]
[ 60 73 78]
[ 60 73 78]
...
[110 117 120]
[108 115 118]
[108 115 118]]
[[ 59 72 77]
[ 59 72 77]
[ 59 72 77]
...
[108 115 118]
[105 112 115]
[103 110 113]]
[[ 58 71 76]
[ 58 71 76]
[ 59 72 77]
...
[109 116 119]
[104 111 114]
[103 110 113]]]
**************
[[[ 55 62 48]
[ 58 68 53]
[ 61 68 54]
...
[129 134 132]
[131 136 136]
[131 136 134]]
[[ 46 56 43]
[ 51 61 46]
[ 53 63 48]
...
[128 133 133]
[130 135 135]
[131 136 136]]
[[ 51 61 48]
[ 54 64 49]
[ 55 65 50]
...
[127 132 132]
[129 134 134]
[130 135 135]]
...
[[ 77 72 59]
[ 78 73 60]
[ 78 73 60]
...
[120 117 110]
[118 115 108]
[118 115 108]]
[[ 77 72 59]
[ 77 72 59]
[ 77 72 59]
...
[118 115 108]
[115 112 105]
[113 110 103]]
[[ 76 71 58]
[ 76 71 58]
[ 77 72 59]
...
[119 116 109]
[114 111 104]
[113 110 103]]]文章来源:https://www.toymoban.com/news/detail-859211.html
CHW通道顺序通常更常见于深度学习框架,如PyTorch和TensorFlow,因为它们通常期望输入数据的通道维度在前面。如果您希望将OpenCV读取的图像数据转换为CHW顺序,您可以使用NumPy来进行维度的重新排列。例如,在Python中,您可以这样做:文章来源地址https://www.toymoban.com/news/detail-859211.html
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg')
# 将数据从HWC转换为CHW
image_chw = np.transpose(image, (2, 0, 1))
到了这里,关于Pillow(PIL)和OpenCV读取数据的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!