1. 程式人生 > >opencv(python)影象處理之九

opencv(python)影象處理之九

一、函式簡介
1、threshold—影象簡單閾值化處理
函式原型:threshold(src, thresh, maxval, type, dst=None)
src:影象矩陣
thresh:閾值
maxVal:畫素最大值
type:閾值化型別
2、adaptiveThreshold—影象自適應閾值化處理
函式原型:adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
src:影象矩陣
maxValue:畫素最大值
adaptiveMethod:自適應方法
thresholdType:閾值化型別
blockSize:視窗尺寸
C:為一整數,減去該整數來對閾值進行微調
3、thresholding.otsu—影象最大類間方差閾值化處理
函式原型:thresholding.otsu(src)
src:影象矩陣
4、thresholding.rc—影象Riddler-Calvard閾值化處理
函式原型:thresholding.rc(src)
src:影象矩陣
二、例項演練
1、影象二值化及反轉
程式碼如下:
#encoding:utf-8

#
#影象二值化及反轉
#

import numpy as np
import cv2

image = cv2.imread("H:\\img\\coins.bmp")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#將影象轉為灰色
blurred = cv2.GaussianBlur(image, (5, 5), 0)#高斯濾波
cv2.imshow("Image", image)#顯示影象
(T, thresh) = cv2.threshold(blurred, 155, 255, cv2.THRESH_BINARY)#閾值化處理,閾值為:155
cv2.imshow("Threshold Binary", thresh)

(T, threshInv) = cv2.threshold(blurred, 155, 255, cv2.THRESH_BINARY_INV)#反閾值化處理,閾值為:155
cv2.imshow("Threshold Binary Inverse", threshInv)

#cv2.imshow("Coins", cv2.bitwise_and(image, image, mask =threshInv))
cv2.waitKey(0)

2、影象自適應閾值化
程式碼如下:
#encoding:utf-8

#
#自適應閾值化處理
#

import numpy as np
import cv2

image = cv2.imread("H:\\img\\lena.jpg")#讀取影象
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#將影象轉化為灰度
blurred = cv2.GaussianBlur(image, (5, 5), 0)#高斯濾波
cv2.imshow("Image", image)

#自適應閾值化處理
#cv2.ADAPTIVE_THRESH_MEAN_C:計算鄰域均值作為閾值
thresh = cv2.adaptiveThreshold(blurred, 255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 4)
cv2.imshow("Mean Thresh", thresh)
#cv2.ADAPTIVE_THRESH_GAUSSIAN_C:計算鄰域加權平均作為閾值
thresh = cv2.adaptiveThreshold(blurred, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 15, 3)
cv2.imshow("Gaussian Thresh", thresh)
cv2.waitKey(0)

3、最大類間方差閾值化
程式碼如下:
#encoding:utf-8

#
#最大類間方差法
#
import numpy as np
import cv2
import mahotas
#載入影象
image = cv2.imread("H:\\img\\lena.jpg") #讀入影象
cv2.imshow("Original",image)#顯示原影象
cv2.waitKey()#程式暫停

#對影象進行高斯濾波
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#將原影象轉化為灰度影象
blurred = cv2.GaussianBlur(image,(5,5),0)#高斯濾波
cv2.imshow("Image",image)#顯示影象
cv2.waitKey()

#Otsu's threshold法
T = mahotas.thresholding.otsu(blurred)##最大類間方差法求閾值,T為閾值
print "Otsu's threshold:%d" %(T)#列印閾值
thresh = image.copy()#複製影象:image(矩陣)
thresh[thresh >T] = 255#矩陣thresh中>T的值賦值為255
thresh[thresh < 255] = 0#矩陣thresh中<255的值賦值為0
thresh = cv2.bitwise_not(thresh)#thresh取反
cv2.imshow("Otsu",thresh)#顯示影象
cv2.waitKey()

4、Riddler-Calvard方法
程式碼如下:
#encoding:utf-8

#
#最大類間方差法
#

import numpy as np
import cv2
import mahotas

#載入影象
image = cv2.imread("H:\\img\\lena.jpg") #讀入影象
cv2.imshow("Original",image)#顯示原影象
cv2.waitKey()#程式暫停

#對影象進行高斯濾波
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#將原影象轉化為灰度影象
blurred = cv2.GaussianBlur(image,(5,5),0)#高斯濾波
cv2.imshow("Image",image)#顯示影象
cv2.waitKey()

#Riddler-Calvard方法
T = mahotas.thresholding.rc(blurred)#用Riddler-Calvard法求閾值
print "Riddler-Calvard:%d" %(T)#列印閾值
thresh = image.copy()#複製影象:image(矩陣)
thresh[thresh >T] = 255#矩陣thresh中>T的值賦值為255
thresh[thresh < 255] = 0#矩陣thresh中<255的值賦值為0
thresh = cv2.bitwise_not(thresh)#thresh取反
cv2.imshow("Riddler-Calvard",thresh)#顯示影象
cv2.waitKey()