淺談Opencv(下)

Opencv(下)

圖像閾值化處理

[0,255]

<=127的轉化爲0 >=127轉化爲1

ret,dst = cv2.threshold(src,thresh,maxval,type)

src:源圖像(需要閾值化處理的圖像)

maxval:當像素超過了閾值,(小於閾值)所賦予的值,否則取0

ret:閾值返回值(閾值設定的是多少)

dst:輸出的圖像

type: (1) cv2.THRESH_BINARY:當像素點大於閾值時,取指定的255,小於等於閾值時,取0

(2)cv2.THRESH_BINARY_INV:當像素點大於閾值時,取指定的0,小於等於閾值時,取255

注意事項:當閾值處理彩色圖像時,出現粉色等顏色的原因在於BGR三通道的疊加

(3)cv2.THRESH_TRUNC:超過閾值則取閾值,低於閾值,則取自身

(4)cv2.THRESH_TOZERO:超過閾值不變,低於閾值取0

(5)cv2.THRESH_TOZERO_INV:超過閾值變爲0,低於閾值不變

import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
ret,img1 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
cv2.imshow('img',img1)
cv2.waitKey(0)
均值濾波

cv2.blur(src,k)

src:源圖像

kernel:大小(選擇多大的矩陣進行移動) 【3*3】最常見

import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.blur(img,(3,3))
cv2.imshow('img',new_img)
cv2.waitKey(0)
方框濾波

cv2.boxFilter(src,depth)

src:源圖像

depth:圖像的深度,填-1,表示與源圖像深度相同。

ksize:核大小(3*3)or(5 * 5)

normalize:是否進行歸一化

0:false (求和,像素點溢出,取255)

1: True (求均值,與均值濾波相同)

import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.boxFilter(img,-1,(2,2))
cv2.imshow('img',new_img)
cv2.waitKey(0)
高斯濾波

考慮了權重的問題

cv2.GaussianBlur(src,ksize)

src:源圖像

ksize:(3*3) (5 *5) 在高斯濾波中必須爲奇數

sigmaX,sigmaY:高斯核函數在X或Y方向上的標準偏差【控制權重】

sigmaX = 0, sigmaX = 0.3*((ksize-1) *0.5-1)+0.8

import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.GaussianBlur(img,(5,5),0)
cv2.imshow('img',new_img)
cv2.waitKey(0)
中值濾波

cv2.medianBlur(src,ksize)

src:源圖像

ksize:核大小 只能傳遞Int

import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.medianBlur(img,3)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的腐蝕

1、形態學轉化主要針對於二值圖像(黑白圖像(非0即1))

2、卷積核

cv2.erode(src,kernel,iterations)

src:源圖像

kernel:卷積核 (3*3)

iterations:迭代次數

import cv2
import numpy as np
path = r'./2.png'
img = cv2.imread(path,1)
kernal = np.ones((3,3),np.uint8)
new_img = cv2.erode(img,kernal,iterations=5)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的膨脹

圖像腐蝕的逆操作

cv2.dilate(src,kernel,iterations)

src:源圖像

kernel:卷積核 (3*3)

iterations:迭代次數

import cv2
import numpy as np
path = r'./3.png'
img = cv2.imread(path,1)
kernal = np.ones((3,3),np.uint8)
new_img = cv2.dilate(img,kernal,iterations=5)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的開運算

腐蝕:去除圖片的噪聲

膨脹:恢復原來的圖片(沒有噪聲的)

開運算:腐蝕–》膨脹

cv2.morphologyEx(src,cv2.MORPH_OPEN,ksize)

src:源圖像

cv2.MORPH_OPEN:開運算(先腐蝕後膨脹)

ksize:卷積核的大小(表示腐蝕及膨脹的大小)

import cv2
import numpy as np
path = r'./2.png'
img = cv2.imread(path,1)
kernal = np.ones((7,7),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的閉運算

閉運算:就是先膨脹->再腐蝕

實質:還是爲了去除噪聲

cv2.morphologyEx(src,cv2.MORPH_CLOSE,ksize)

src:源圖像

cv2.MORPH_OPEN:開運算(先腐蝕後膨脹)

ksize:卷積核的大小(表示腐蝕及膨脹的大小)

import cv2
import numpy as np
path = r'./close.png'
img = cv2.imread(path,1)
kernal = np.ones((7,7),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的梯度

目的:主要爲了提取目標圖像的輪廓

cv2.morphologyEx(src,cv2.MORPH_GRADIENT,k)

src:源圖像

cv2.MORPH_GRADIENT:進行梯度運算(膨脹-腐蝕)

k:卷積核

import cv2
import numpy as np
path = r'./1.png'
img = cv2.imread(path,1)
# #膨脹操作
kernal = np.ones((3,3),np.uint8)
# img1 = cv2.dilate(img,kernal,iterations=5)
# #腐蝕操作
# img2 = cv2.erode(img,kernal,iterations=5)
# new_img = img1 - img2
new_img = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的禮帽操作

目的:爲了提取圖像中的噪聲

本質:原始圖像 - 開運算之後的圖像

cv2.morphologyEx(src,cv2.MORPH_TOPHAT,k)

src:源圖像

cv2.MORPH_TOPHAT:進行禮帽操作

k:卷積核

import cv2
import numpy as np
path = r'./close.png'
img = cv2.imread(path,1)
kernal = np.ones((5,5),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的黑帽操作

目的:爲了提取圖像中的噪聲

本質:閉運算 - 原始圖像

cv2.morphologyEx(src,cv2.MORPH_BLACKHAT,k)

src:源圖像

cv2.MORPH_BLACKHAT:進行黑帽操作

k:卷積核

import cv2
import numpy as np
path = r'./close.png'
img = cv2.imread(path,1)
kernal = np.ones((5,5),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章