''' 邊緣識別:物體的邊緣檢測是物體識別常用的手段。邊緣檢測常用亮度梯度方法。 通過識別亮度梯度變化最大的像素點從而檢測出物體的邊緣。 常用邊緣檢測算法相關API: # 索貝爾邊緣識別 # cv.CV_64F:卷積運算使用數據類型為64位浮點型(保證微分的精度) # 1:在水平方向使用索貝爾偏微分識別邊緣 # 0:不再垂直方向使用索貝爾偏微分識別邊緣 # ksize:卷積核為5*5的方陣 cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5) # 拉普拉斯邊緣識別 cv.Laplacian(original, cv.CV_64F) # Canny邊緣識別 # 50:水平方向閾值 240:垂直方向閾值 cv.Canny(original, 50, 240) ''' import cv2 as cv original = cv.imread("./ml_data/chair.jpg", cv.IMREAD_GRAYSCALE) print(original.shape) cv.imshow('Original', original) # 索貝爾邊緣識別---水平方向 hsobel = cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5) cv.imshow('H-Sobel', hsobel) # 索貝爾邊緣識別---垂直方向 vsobel = cv.Sobel(original, cv.CV_64F, 0, 1, ksize=5) cv.imshow('V-Sobel', vsobel) # 索貝爾邊緣識別---兩方向 sobel = cv.Sobel(original, cv.CV_64F, 1, 1, ksize=5) cv.imshow('Sobel', sobel) # 拉普拉斯邊緣識別 laplacian = cv.Laplacian(original, cv.CV_64F) cv.imshow('Laplacian', laplacian) # Canny邊緣識別 canny = cv.Canny(original, 50, 240) cv.imshow('Canny', canny) cv.waitKey()
''' 亮度提升:OpenCV提供了直方圖均衡化的方式實現亮度提升,更有利於邊緣識別與物體識別模型的訓練。 OpenCV直方圖均衡化相關API: # 彩色圖轉為灰度圖 gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY) # 直方圖均衡化 equalized_gray = cv.equalizeHist(gray) ''' import cv2 as cv original = cv.imread('./ml_data/sunrise.jpg') cv.imshow('Original', original) # 彩色圖轉為灰度圖 gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY) cv.imshow('Gray', gray) # 直方圖均衡化 equalized_gray = cv.equalizeHist(gray) cv.imshow('Equalized_gray', equalized_gray) # 直接對顏色亮度均衡化 yuv = cv.cvtColor(original, cv.COLOR_BGR2YUV) yuv[..., 0] = cv.equalizeHist(yuv[..., 0]) equalized_color = cv.cvtColor(yuv, cv.COLOR_YUV2BGR) cv.imshow('Equalized Color', equalized_color) cv.waitKey()