一 圖像閾值處理 準備一張灰度圖像 閾值處理通常是設定一個閾值,讓圖片的所有像素點的值與其比較做出一系列的操作。 在opencv常用的閾值處理函數有五種,分別是THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZE ...
一 圖像閾值處理
準備一張灰度圖像
閾值處理通常是設定一個閾值,讓圖片的所有像素點的值與其比較做出一系列的操作。
在opencv常用的閾值處理函數有五種,分別是THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV。接下來分別看下這幾種處理圖片後的效果
1. THRESH_BINAR
# 像素值超過127的變成255,否則為0,亮的更亮
ret,threshold1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
2. THRESH_BINARY_INV
# 像素值超過127的變成0,否則為255,亮的更暗
ret,threshold2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
3. THRESH_TRUNC
# 像素值超過127的變成127,否則不變,理解成圖片整體變暗 ret,threshold3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
4. THRESH_TOZERO
# 像素值超過127的不變,否則為0,理解成加大圖片的對比度 ret,threshold4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
5. THRESH_TOZERO_INV
# 像素值超過127的為0,否則不變 ret,threshold5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
閾值處理的使用場景我會在後續的博客中寫出~~~
二 . 濾波
濾波的原理是通過指定大小的單位矩陣與圖像做相關運算,具體的線性代數的東西這裡不展開,若後續工作會深入,再回來完善...
經常使用到的濾波操作有三種,均值濾波、高斯濾波、中位值濾波。
1.均值濾波(通過求與單位矩陣做內積和的平均值做圖像處理)
blur = cv2.blur(img,(3,3))
2. 高斯濾波 (根據正態分佈處理圖像,越靠近中心點,值越接近)
blur2 = cv2.GaussianBlur(img,(3,3),1)
3. 中位值濾波(取指定大小矩陣的所有元素值的中位值處理)
blur3 = cv2.medianBlur(img,5)
把這幾張圖片水平拼接觀察,不難發現在處理噪點的場景中,使用中位值濾波效果最為明顯
三. 腐蝕與膨脹
1. 腐蝕
img = cv2.imread("test.png") img2 = cv2.erode(img,kernel=numpy.ones((9,9),numpy.uint8),iterations=9) 和單位矩陣做處理,迭代9次,意味這腐蝕的程度 cv2.imshow("IMage",numpy.hstack((img,img2))) cv2.waitKey(0) cv2.destroyAllWindows()
2. 膨脹 (嗯,和腐蝕操作剛好相反)
img2 = cv2.dilate(img,kernel=numpy.ones((9,9),numpy.uint8),iterations=9) cv2.imshow("IMage",numpy.hstack((img,img2))) cv2.waitKey(0) cv2.destroyAllWindows()
3. 梯度運算(膨脹-腐蝕)
img2=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel=numpy.ones((5,5),numpy.uint8)) cv2.imshow("IMage",img2)
4. 禮帽與黑帽
img2 = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel=numpy.ones((5,5),numpy.uint8)) # 就是腐蝕掉的部分
img3 = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel=numpy.ones((5,5),numpy.uint8)) # 原始部分的外殼
結語:這段時間工作實在太忙了,不是評論提醒都快忘記繼續寫博客了,這部分的內容學過比較久了,今天整理一下方便他人也方便自己。
——2019-10-17 22:42:32