一, 二值化函數
功能:
用于對圖像進行二值化處理
參數:
cv2.threshold(輸入你的圖像所對應的灰度圖,
? ? ? ? ? ? ? ? ? ? ? 閾值:是浮點還是整數取決予圖像的數據類型
? ? ? ? ? ? ? ? ? ? ? 最大值;高于閾值的像素值,
? ? ? ? ? ? ? ? ? ? ? 閾值類型:cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、? ? ? ? ? ? ? ? ?cv2.THRESH_TRUNC、cv2.THRESH_TOZERO?和?cv2.THRESH_TOZERO_INV
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??)
返回值:
二值化的返回值有2個
1:實際使用的閾值
2:二值化的圖像
注意:調用二值化函數使用的圖像一定要是灰度化后的圖像
應用:
import cv2img = cv2.imread("./women.png.")img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret, img_threshold = cv2.threshold(img_gray,120,255,cv2.THRESH_BINARY)print(ret)cv2.imshow("img",img)
cv2.imshow("img_gary",img_gray)
cv2.imshow("img_threshold",img_threshold)
cv2.waitKey(0)
可以通過修改閾值呈現不同的效果
1.使用cv2.THRESH_BINARY
2.使用cv2.THRESH_BINARY_INV
3.使用THRESH_TRUNC
二.自適應二值化函數 ?功能、參數、返回值、應用
功能:
與二值化算法相比,自適應二值化更加適合用在明暗分布不均的圖片
參數:
cv2.adaptiveThreshold(輸入你的圖像所對應的灰度圖,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?最大值,#通常為255
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?自適應方法,#cv2.ADAPTIVE_THRESH_MEAN_C? ?|? ? ? ? ? ? ????????????????????????????????????????????????????????????????cv2.ADAPTIVE_THRESH_GAUSSIAN_C
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?二值化類型,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?核的大小:最好是奇數
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?最終的閾值:從計算出的平均值或加權和中減去的常數
)
返回值:
自適應二值化的圖像
應用:
import cv2img = cv2.imread("./women.png.")img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)img_adapt = cv2.adaptiveThreshold(img_gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)cv2.imshow("img",img)
cv2.imshow("img_gary",img_gray)
cv2.imshow("img_threshold",img_adapt)
cv2.waitKey(0)
可以通過修改閾值和自適應方法呈現不同的效果
1.cv2.ADAPTIVE_THRESH_GAUSSIAN_C
2.cv2.ADAPTIVE_THRESH_MEAN_C
三,腐蝕函數
功能:
將二值化圖像中的白色部分盡可能的壓縮
參數:
cv2.erode(讀取圖片,
? ? ? ? ? ? ? ? ? ?kernel: 結構元素,核,
? ? ? ? ? ? ? ? ? ?iterations: 迭代次數,次數越多效果越明顯
????????????????????)
kernel:
cv2.getStructuringElement(cv2.MORPH_ELLIPSE,
????????????????????????????????????????????????(3, 3)大小
)
返回值:
腐蝕后的圖像
應用:
import cv2img = cv2.imread("./123.png.")kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))img_erode = cv2.erode(img,kernal)cv2.imshow("img",img)
cv2.imshow("img_gary",img_erode)
cv2.waitKey(0)
四,膨脹函數
功能:
將二值化圖像中的白色部分盡可能的擴張
參數:
cv2.dilate(
????????????????????????讀取圖片,
? ? ? ? ? ? ? ? ? ?kernel: 結構元素,核,
? ? ? ? ? ? ? ? ? ?iterations: 迭代次數,次數越多效果越明顯
)
返回值:
膨脹后的圖片
應用:
import cv2img = cv2.imread("./123.png.")kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))img_dilate = cv2.dilate(img,kernal)cv2.imshow("img",img)
cv2.imshow("img_gary",img_dilate)
cv2.waitKey(0)
五,仿射變換函數
?功能:
用于對圖像進行仿射變換(Affine Transformation)的函數,仿射變換包括平移、旋轉、縮放以及剪切等操作。
參數:
cv2.warpAffine(輸入的圖像,
????????????????????????變換矩陣,:通過其他函數(如 cv2.getRotationMatrix2D())計算得到的,用于描述仿射變換
? ? ? ? ? ? ? ? ? ? ? ??輸出圖像的大小,
????????????????????????插值方法(默認為線性),:cv2.INTER_LINEAR(線性插值)、cv2.INTER_NEAREST(最近鄰插值)、cv2.INTER_CUBIC(三次樣條插值)
????????????????????????邊緣填充方法,:cv2.BORDER_CONSTANT(常量填充)、cv2.BORDER_REFLECT(反射)、cv2.BORDER_REFLECT_101(反射101)
????????????????????????邊界顏色 :borderMode 為 cv2.BORDER_CONSTANT
)
cv2.getRotationMatrix2D(center:旋轉的中心點, angle:旋轉角度, scale:縮放因子)
返回值:
輸出圖像
應用:
import cv2img = cv2.imread("./women.png")M = cv2.getRotationMatrix2D((img.shape[1]/2,img.shape[0]/2),45,0.5)
img_warp = cv2.warpAffine(img,M,(700,700),flags=cv2.INTER_LINEAR,borderMode=cv2.BORDER_WRAP)cv2.imshow("img",img)
cv2.imshow("img_gary",img_warp)
cv2.waitKey(0)
修改縮放因子
六,透視變換函數
功能:
用于對圖像進行透視變換的函數
而透視變換是把一個圖像投影到一個新的視平面的過程
參數:
cv2.warpPerspective(src, M, dsize, dst=None, flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT, borderValue=None)
cv2.warpPerspective(輸入圖像,
????????????????????????????????????透視變換矩陣,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??輸出圖像的尺寸,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??輸出圖像,這是一個可選參數。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?插值方法,:cv2.INTER_LINEAR(線性插值)、cv2.INTER_NEAREST(最近鄰插值)、cv2.INTER_CUBIC(三次樣條插值)
)
返回值:
圖像
應用:
import cv2
import numpy as npimg = cv2.imread("./223.png")points1 = np.array([[80, 300], [950, 50], [150, 620], [1060,400]],dtype=np.float32)points2 = np.array([[0, 0], [img.shape[1], 0], [0, img.shape[0]], [img.shape[1], img.shape[0]]],dtype=np.float32)
M = cv2.getPerspectiveTransform(points1, points2)img_warp = cv2.warpPerspective(img, M,(img.shape[1], img.shape[0]))cv2.imshow("img",img)
cv2.imshow("img1",img_warp)
cv2.waitKey(0)