图像颜色的反转一般分为两种:一种是灰度图片的颜色反转,另一种是彩色图像的颜色反转。
本节使用的原图如下:
1.1 灰度图像颜色反转
灰度图像每个像素点只有一个像素值来表示,色彩范围在0-255之间,反转方法255-当前像素值。
首先需要安装OpenCV:
导入本例所需的程序包:
In [ ]:
%matplotlib inline
import cv2
import numpy as np
from matplotlib import pyplot as plt
将原图转换为灰度图片:
In [ ]:
img = cv2.imread('./lena.jpg', 1)
height, width, deep = img.shape
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(gray, cmap='gray')
plt.show()
反转图片中所有的像素值:
In [ ]:
dst = np.zeros((height,width,1), np.uint8)
for i in range(0, height):
for j in range(0, width):
grayPixel = gray[i, j]
dst[i, j] = 255-grayPixel
将反转后的图像保存再显示出来,可以看到灰度颜色已经反转:
In [ ]:
cv2.imwrite("./lena_changed.jpg", dst)
dst = cv2.imread('./lena_changed.jpg', 1)
plt.imshow(dst)
plt.show()
1.2 彩色图像颜色反转
彩色图像的每个像素点由RGB三个元素组成,所以反转的时候需要用255分别减去b,g,r三个值。
重新读取图像并进行颜色反转:
In [ ]:
img = cv2.imread('./lena.jpg', 1)
height, width, deep = img.shape
# 彩色图像颜色反转 NewR = 255-R
dst = np.zeros((height, width, deep), np.uint8)
for i in range(0, height):
for j in range(0,width):
(b, g, r) = img[i, j]
dst[i, j] = (255-b,255-g,255-r)
将反转后的图像保存再显示出来,可以看到彩色图像颜色已经反转:
In [ ]:
dst2 = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.imshow(dst2)
plt.show()