OpenCV-Python-(3)-影象預處理
影象預處理:
- cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) #邊界填充
- cv2.add() #相加
- cv2.substract() #相減
- cv2.bitwise_and(src1, src2, dst=None, mask=one) #與
- cv2.bitwise_or(src1, src2, dst=None, mask=None) #或
- cv2.bitwise_not(src1, src2, dst=None, mask=None) #非
- cv2.bitwise_xor(src1, src2, dst=None, mask=None)
- cv2.cvtColor(img, flag) #可以RGB轉為GRAY&HSV
1.影象邊界填充
cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value)
- src:源影象
- top,bottem,left,right: 分別表示四個方向上邊界的長度
- borderType: 邊界的型別,有以下幾種:
BORDER_REFLICATE # 直接用邊界的顏色填充
BORDER_REFLECT # 反轉
BORDER_REFLECT_101 # 反轉,和上面類似,但在反轉時,會把邊界空開
BORDER_WRAP
BORDER_CONSTANT # 常量,增加的變數均為value填充的顏色
- value - Color of border if border type is cv.BORDER_CONSTANT
import cv2
img = cv2.imread(r'C:\Users\x\Desktop\11.jpg', cv2.IMREAD_ANYCOLOR)
green = [0,255,0]
replicate = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img,50,50,10,10,cv2.BORDER_CONSTANT,value=green)
cv2.imshow("image", img)
cv2.imshow("replicate", replicate)
cv2.imshow("reflect", reflect)
cv2.imshow("reflect101", reflect101)
cv2.imshow("wrap", wrap)
cv2.imshow("constant", constant)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.影象運算:相加、相減、與、或、異或、非
- cv2.add()
- cv2.substract()
import cv2
import numpy as np
img = cv2.imread(r'C:\Users\x\Desktop\11.jpg', cv2.IMREAD_ANYCOLOR)
#構建矩陣,進行cv2.add 與 cv2.substract運算
A = np.ones(img.shape, dtype='uint8')*100
add = cv2.add(img, A)
subtract = cv2.subtract(img, A)
cv2.imshow("image", img)
cv2.imshow("add", add)
cv2.imshow("subtract", subtract)
cv2.waitKey(0)
cv2.destroyAllWindows()
影象與運算-cv2.bitwise_and(src1, src2, dst=None, mask=one)
影象或運算-cv2.bitwise_or(src1, src2, dst=None, mask=None)
影象非運算-cv2.bitwise_not(src1, src2, dst=None, mask=None)
影象異或運算-cv2.bitwise_xor,一個二值圖,將黑色轉為白色,白色轉為黑
影象異或運算-cv2.bitwise_xor(src1, src2, dst=None, mask=None)
這四個運算,最少要有兩個引數,即src1,src2;dst:引數返回結果可選,mask:引數也是可選的,指定msk區域進行操作。
import cv2
import numpy as np
# 生成矩形圖形
rectangle = np.zeros((300, 300, 3), dtype='uint8')
cv2.rectangle(rectangle, (25, 25), (275, 275), (255,255,255), -1)
#生成圓形
circle = np.zeros((300, 300, 3), dtype='uint8')
cv2.circle(circle, (150, 150), 150, (255,255,255), -1)
# 位運算
bitwise_and = cv2.bitwise_and(rectangle, circle) #與
bitwise_or = cv2.bitwise_or(rectangle, circle) #或
bitwise_xor = cv2.bitwise_xor(rectangle, circle) #異或
bitwise_not = cv2.bitwise_not(rectangle) #非
cv2.imshow("rectangle", rectangle)
cv2.imshow("circle", circle)
cv2.imshow("bitwise_and", bitwise_and)
cv2.imshow("bitwise_or", bitwise_or)
cv2.imshow("bitwise_xor", bitwise_xor)
cv2.imshow("bitwise_not", bitwise_not)
cv2.waitKey(0)
cv2.destroyAllWindows()
影象掩模處理mask
import cv2
import numpy as np
img = cv2.imread(r'C:\Users\x\Desktop\47.jpg', cv2.IMREAD_ANYCOLOR)
mask = np.zeros(img.shape[:2], dtype='uint8')
(w, h) = (img.shape[1]//2, img.shape[0]//2)
cv2.rectangle(mask, (w-200, h-200), (w, h), 255, -1)
cv2.circle(mask, (w+20, h+90), 100, 255, -1)
masked = cv2.bitwise_and(img, img, mask=mask)
masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("image", img)
cv2.imshow("mask", masked)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.色彩空間
opencv中有多種色彩空間,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8種。
cv2.cvtColor(img, flag) 可以RGB轉為GRAY&HSV
- img,源圖片
- flag, 色彩空間轉換型別:cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV等
HSV(Hue(色調), Saturation(飽和度) , Value(明度)):
-
n色度H:用角度度量,取值範圍為0~360,紅色開始按逆時針方向計算,紅色為0度,綠色為120度,藍色為240度
-
飽和度S:接近光譜色的程度,顏色可以看成是光譜色與白色混合結果,光譜色佔的比例愈大,顏色接近光譜色的程度越高,顏色飽和度就越高。光譜色中白色成分為0,飽和度達到最高,取值範圍0%~100%,值越大,顏色越飽和
-
明度V:表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,與物體的透射比有關,取值範圍為0%(黑)~100%(白)
在Opencv中
H色度取值範圍是[0,179]
S飽和度的取值範圍是[0,255]
V明度的取值範圍是[0,255]
import cv2
img = cv2.imread(r'C:\Users\x\Desktop\47.jpg', cv2.IMREAD_ANYCOLOR)
GRAY = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
LAB = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
cv2.imshow("image", img)
cv2.imshow("GRAY", GRAY)
cv2.imshow("HSV", HSV)
cv2.imshow("LAB", LAB)
cv2.waitKey(0)
cv2.destroyAllWindows()