文章目录
- 一、项目思路
- 二、算法详解
- 2.1、获取图像信息
- 2.2、新建模板
- 2.3、图像通道顺序
- 三、项目实战:彩图的像素值反转(方法一)
- 四、项目实战:彩图的像素值反转(方法二)
- 五、项目实战:彩图转换为灰图后,像素值反转
一、项目思路
- 读取图像
- 获取图像信息
- 新建模板
- 像素值反转
- 显示图像
二、算法详解
2.1、获取图像信息
img.shape[0]:图像的垂直尺寸(高度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数
2.2、新建模板
作用:根据给定形状和类型,返回全0填充的数组。
函数说明:zeros(shape, dtype=float, order='C')
输入参数:
shape: 形状
dtype: (可选参数)数据类型,默认numpy.float64。
order: (可选参数),c代表行优先;F代表列优先
2.3、图像通道顺序
需注意:Pillow加载图像后的尺寸是二维,图形化是三维,但无法打印三维尺寸。
详细区别:
Opencv
:uint8的ndarray数据,通道顺序[h, w, c]
,颜色通道BGR
。
- 导入模块:
import cv2
(1)cv2.imread()
(2)cv2.imshow()
(3)cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
Matplotlib(plt)
:uint8的ndarray数据,通道顺序[h, w, c]
,颜色通道RGB
。
- 导入模块:
import matplotlib.pyplot as plt
(1)plt.imread()
(2)plt.imshow()
Pillow(PIL)
:uint8的ndarray数据,通道顺序[h, w, c]
,颜色通道RGB
。
- 导入模块:
import PIL
(1)PIL.Image.open()
(2)PIL.Image.show()
Pythorch
:tensor数据,通道顺序[n, c, h, w]
,颜色通道RGB
。
- 导入模块:
import torchvision
(1)torchvision.transforms.ToTensor()
(2)torchvision.transforms.ToPILImage()
三、项目实战:彩图的像素值反转(方法一)
import cv2 # opencv读取的格式是BGR
import matplotlib.pyplot as plt # Matplotlib是RGB
import numpy as np
img = cv2.imread(r'bee.jpg') # 读取图像
imgInfo = img.shape # 读取图像信息
height = imgInfo[0] # 图像高度
width = imgInfo[1] # 图像宽度
channel = imgInfo[2] # 图像通道数
dst = np.zeros((height, width, channel), np.uint8)
for ii in range(channel):
for jj in range(height):
for kk in range(width):
Pixel = img[jj, kk, ii]
dst[jj, kk, ii] = 255 - Pixel
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.subplot(1, 2, 1), plt.imshow(img), plt.axis('off'), plt.title('Raw')
plt.subplot(1, 2, 2), plt.imshow(dst), plt.axis('off'), plt.title('New')
plt.show()
python–图像颜色反转
四、项目实战:彩图的像素值反转(方法二)
import cv2 # opencv读取的格式是BGR
import matplotlib.pyplot as plt # Matplotlib是RGB
img = cv2.imread(r'bee.jpg')
dst = 255 - img
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.subplot(1, 2, 1), plt.imshow(img), plt.axis('off'), plt.title('Raw')
plt.subplot(1, 2, 2), plt.imshow(dst), plt.axis('off'), plt.title('New')
plt.show()
五、项目实战:彩图转换为灰图后,像素值反转
import cv2 # opencv读取的格式是BGR
import matplotlib.pyplot as plt # Matplotlib是RGB
img = cv2.imread('starry_night.jpg', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 彩色图像转换为灰度图像(3通道变为1通道)
dst = 255 - gray # 最大图像灰度值减去原图像,即可得到反转的图像
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.subplot(1, 3, 1), plt.imshow(img), plt.axis('off'), plt.title('Raw')
plt.subplot(1, 3, 2), plt.imshow(gray), plt.axis('off'), plt.title('Gray')
plt.subplot(1, 3, 3), plt.imshow(dst), plt.axis('off'), plt.title('New')
plt.show()