【Opencv项目实战】图像的像素值反转

一、项目思路

  1. 读取图像
  2. 获取图像信息
  3. 新建模板
  4. 像素值反转
  5. 显示图像

二、算法详解

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()

猜你喜欢

转载自blog.csdn.net/shinuone/article/details/129365296