圖像是由一個一個的像素組成的,每個像素又是由一個個不同的顏色值(OpenCV中為bgr模式)組成,其中每個顏色通道的值均為0-255。
所謂圖像的顏色反轉,就是將每個顏色通道值用255減去原通道值,得到一個新的顏色通道值,再重新組合成新的bgr顏色通道產生新像素而形成新的圖像。舉個極端的例子,比如一個純白色像素點的值為(255,255,255),它經過顏色反轉變換后形成的新的像素點為(0,0,0),也就是變成了純黑色像素點。
灰度圖的圖像顏色反轉:
import cv2 import numpy as np img = cv2.imread("3.jpg",0) #讀取一張圖片,灰度 height,width=img.shape dst=np.zeros((height,width,1),np.uint8) for i in range(height): for j in range(width): dst[i,j]=255-img[i,j] cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.waitKey() #窗口等待任意鍵盤按鍵輸入,0為一直等待,其他數字為毫秒數
效果圖:
bgr圖像的圖像顏色反轉:
對於bgr圖像而言,我們需要對b(藍色)、g(綠色)、r(紅色)三個顏色通道做處理。首先,我們仍然使用imread()函數讀取原圖像數據並使用shape屬性獲取相關圖像信息,然后開始遍歷像素點,與灰度圖不同的是,我們需要對b、g、r三個顏色通道同時做用255減去當前顏色通道值的處理,然后再組成新的bgr值賦值給像素點,從而實現bgr圖像的圖像顏色反轉。
import cv2 import numpy as np img = cv2.imread("2013.jpg",1) #讀取一張圖片,彩色 cha=img.shape height,width,deep=cha dst=np.zeros((height,width,3),np.uint8) for i in range(height): #色彩反轉 for j in range(width): b,g,r=img[i,j] dst[i,j]=(255-b,255-g,255-r) cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.waitKey()
效果圖: