圖像顏色的反轉一般分為兩種:一種是灰度圖片的顏色反轉,另一種是彩色圖像的顏色反轉。
本節使用的原圖如下:
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()