图像的反色变化

  图像的反色变换涉及到图像的像素值矩阵的变换。假设原始图像为 I I I,其对应的像素值矩阵为 M I M_I MI,则反色变换可以表示为:
M out = L max − M I M_{\text{out}} = L_{\text{max}} - M_I Mout=LmaxMI
其中, L max L_{\text{max}} Lmax 是亮度的最大值, M out M_{\text{out}} Mout 是输出图像的像素值矩阵。
  反色变换的作用是将图像中每个像素的亮度值取反,即将亮部变暗,暗部变亮,从而改变图像的外观和视觉效果。它可以增强图像的对比度,使细节更加突出,并且产生独特的艺术效果。
  从数学矩阵的角度来看,反色变换可以被看作是一个元素级的矩阵操作。将原始图像的像素值矩阵 M I M_I MI 中的每个元素都与 L max L_{\text{max}} Lmax 相减,得到输出图像的像素值矩阵 M out M_{\text{out}} Mout。这个操作可以通过对每个像素值进行简单的减法运算来实现。
  在应用场景上,图像反色变换常用于图像处理、计算机视觉和计算机图形学中。它可以用于图像增强,使图像更具有视觉冲击力和辨识度;在图像处理算法中,通过反色变换可以改变图像的亮度分布,从而影响算法的结果;在艺术设计和视觉效果中,反色变换可以创造独特的图像风格和艺术效果。
  总而言之,图像反色变换是通过对图像的像素值矩阵进行元素级操作,将每个像素的亮度值取反,从而改变图像的外观和对比度。它在图像处理、计算机视觉和计算机图形学中有广泛的应用,并能产生独特的艺术效果。
  具体代码实现如下所示:

import cv2
import matplotlib.pyplot as plt
import numpy as np

class ImageInv:
    def __init__(self, input_path):
        self.input_path = input_path

    def imginv(self):
        # 读取图像
        img = cv2.imread(self.input_path, flags=1)

        if img is None:
            print('Unable to load image!')
        else:
            # 转换为灰度图像
            imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            h, w = img.shape[:2]
            # 创建空白图像
            ImgInv = np.empty((w, h), np.uint8)
            # 对每个像素点进行像素值取反
            for i in range(h):
                for j in range(w):
                    ImgInv[i][j] = 255 - imggray[i][j]
            # 显示图像
            self.show_img(img, imggray, ImgInv)

    def show_img(self, img, imggray, ImgInv):
        # 创建一个大小为10x6的图像窗口,显示三个子图
        plt.figure(figsize=(10, 6))
        # 第一个子图:原始RGB图像
        plt.subplot(131),plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)),plt.title('imgRGB'),plt.axis('off')
        # 第二个子图:灰度图像
        plt.subplot(132),plt.imshow(imggray, cmap='gray'),plt.title('imgGray'),plt.axis('off')
        # 第三个子图:像素值取反的图像
        plt.subplot(133),plt.imshow(ImgInv, cmap='gray'),plt.title('imgInv'),plt.axis('off')
        # 显示图像窗口
        plt.show()

if __name__ == '__main__':
    # 图像文件路径
    imgfile = "./Images/lena.jpg"
    # 创建ImageInv对象并调用imginv方法处理图像
    img = ImageInv(imgfile)
    img.imginv()

你可能感兴趣的:(opencv_python,计算机视觉,python,人工智能)