深入學習Python+Opencv常用四種圖像處理操作
opencv圖像處理(深度學習中常用的)
改變色彩空間: cv.cvtColor()
cv.cvtColor(img, flag)
- img:原圖像
- flag:要改變的類型
常用的flag有:cv.COLOR_BGR2GRAY (BGR->GRAY)、cv.COLOR_BGR2HSV
img = cv.imread(r'E:\0_postgraduate\test.jpg') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) cv.imshow('img', img) cv.imshow('img_gray', gray) k = cv.waitKey(0) if k & 0xFF == ord('q'): cv.destroyAllWindows()
我們可以看看flag都有哪些:
flags = [i for i in dir(cv) if i.startswith('COLOR_')] print( flags )
改變圖像大小:cv.resize()
cv.resize(img, (width, height))
- img:原始圖像
- width:縮放後圖像的寬度
- height:縮放後圖像的高度
img = cv.imread(r'E:\0_postgraduate\test.jpg') img_resize = cv.resize(img, (500, 600)) cv.imshow('img shape: {} x {}'.format(img.shape[1], img.shape[0]), img) cv.imshow('img_resize shape: {} x {}'.format(img_resize.shape[1], img_resize.shape[0]), img_resize) k = cv.waitKey(0) if k & 0xFF == ord('q'): cv.destroyAllWindows()
比如某些網絡要求輸入的圖像必須是固定大小的:256 x 256這麼大的,這時就可以用cv.resize()對大小不一的圖像進行縮放。
二維卷積操作
cv.filter2D()+軌跡條動態控制圖像參數:cv.createTrackbar()、cv.getTrackbarPos()
卷積操作是什麼這裡就不再介紹瞭。
cv.filter2D(img, -1, kernel)
- img:原始圖像
- -1:這個參數應該是輸出圖像,沒什麼用,填-1就行
- kernel:卷積核,一個二維數組
而至於cv.createTrackbar()、cv.getTrackbarPos(),這兩個函數可以很方便的動態調節圖像的參數,很直觀地看到調節的效果:
cv.createTrackbar()
第一個參數是軌跡欄名稱
第二個參數是它所屬的窗口名稱,
第三個參數是默認值,
第四個參數是最大值,
第五個參數是執行的回調函數每次軌跡欄值都會發生變化,即每次滑動軌跡條時都會調用該參數。
cv.getTrackbarPos()
第一個參數是滑動條名字,
第二個時所在窗口,
返回值是滑動條的數值
# cv.createTrackbar() 和 cv.getTrackbarPos()測試 def nothing(*arg): pass img = cv.imread(r'E:\0_postgraduate\test.jpg') img_original = img cv.namedWindow('image_test') cv.createTrackbar('kernel_width', 'image_test', 1, 30, nothing) cv.createTrackbar('kernel_height', 'image_test', 1, 30, nothing) while 1: w = cv.getTrackbarPos('kernel_width', 'image_test') h = cv.getTrackbarPos('kernel_height', 'image_test') print('w: {} h: {}'.format(w, h)) if(w!=0 and h!=0): kernel = np.ones((w, h), np.float32)/(w*h) img = cv.filter2D(img_original, -1, kernel) cv.imshow('image_test', img) else: cv.imshow('image_test', img_original) k = cv.waitKey(5) if k & 0xFF == ord('q'): break cv.destroyAllWindows()
常用模糊
常用的模糊有平均化模糊:cv.blur()和高斯模糊:cv.GaussianBlur()
(1) cv.blur()
平均化模糊cv.blur()就是讓原始圖像與一個全1的卷積核做卷積,然後將得到的值除以卷積核中像素的總個數,這麼說太繞瞭,直接上圖:
比如我選的卷積核為3×3大小,則原始圖像要與如下的卷積核做卷積:
cv.blur(img, (weight, height))
- img:原始圖像
- weight:卷積核的寬
- height:卷積核的長
(2) cv.GaussianBlur()
高斯模糊是在平均化模糊基礎上的改進,考慮瞭距離對於中心像素的影響:與中心像素距離越近的像素擁有越高的權重,其實超級簡單。高斯模糊的原理可以參考:python實現高斯模糊及原理詳解
cv.GaussianBlur(img, (weight, height), sigmaX, sigmaY)
- img:原始圖像
- weight:卷積核的寬
- height:卷積核的長
- sigmaX:二維高斯函數x的偏差
- sigmaY:二維高斯函數y的偏差
註意:
核的寬度和高度,應該是正數和奇數。我們還應該指定X和Y方向的標準偏差,分別為sigmaX和sigmaY。如果隻指定sigmaX,sigmaY將被視為與sigmaX相同。如果兩者都是零,則根據核大小計算。高斯模糊對去除圖像中的高斯噪聲非常有效。
img = cv.imread(r'E:\0_postgraduate\test.jpg') img_blur = cv.blur(img, (5,5)) img_gaussian = cv.GaussianBlur(img, (5,5), 0) cv.imshow('image_blur', img_blur) cv.imshow('image_gaussian', img_gaussian) k = cv.waitKey(0) if k & 0xFF == ord('q'): cv.destroyAllWindows()
到此這篇關於深入學習Python+Opencv常用四種圖像處理操作的文章就介紹到這瞭,更多相關Python Opencv 圖像處理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 詳解Python+OpenCV實現圖像二值化
- OpenCV-Python實現圖像平滑處理操作
- Python圖像運算之圖像點運算與灰度化處理詳解
- Python OpenCV對圖像進行模糊處理詳解流程
- Python OpenCV圖像模糊處理介紹