1. 程式人生 > >Python OpenCV -- Sobel 運算元

Python OpenCV -- Sobel 運算元

本文章轉載自:https://blog.csdn.net/mokeding/article/details/19371735

Sobel  運算元

   Sobel  運算元 -- 是一種帶有方向性的濾波器,

  在Python 中的原型:

 

dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])

src -- 原影象

 

ddepth -- 影象的深度,-1 表示採用的是與原影象相同的深度。目標影象的深度必須大於等於原影象的深度。

dx dy -- 表示的是示導的階數,0 表示這個方向上沒有求導,一般為 0,1,2。

【可選引數】

dst --  目標影象,與原影象(src)據有相同的尺寸和通道

ksize -- Sobel運算元的大小,必須為1、3、5、7。 

scale  --  縮放導數的比例常數,預設情況下沒有伸縮係數

delta -- 一個可選的增量,將會加到最終的dst中,同樣,預設情況下沒有額外的值加到dst中

borderType -- 判斷影象邊界的模式。這個引數預設值為cv2.BORDER_DEFAULT。

 

使用示例:

#!/usr/bin/env python  
# encoding: utf-8  
import cv2  
import numpy as np 
 
img = cv2.imread("2.jpg", 0)  
x = cv2.Sobel(img,cv2.CV_16S,1,0) # 
y = cv2.Sobel(img,cv2.CV_16S,0,1)  
  
absX = cv2.convertScaleAbs(x)   # 轉回uint8  
absY = cv2.convertScaleAbs(y)  
  
dst = cv2.addWeighted(absX,0.5,absY,0.5,0)  
  
cv2.imshow("X", absX)  
cv2.imshow("Y", absY)  
  
cv2.imshow("Result", dst)  
  
cv2.waitKey(0)  
cv2.destroyAllWindows() 

cv2.CV_16S -- Sobel 函式求完導數後會有負值和大於255的值,而原影象是uint8(8位無符號資料),所以在建立影象時長度不夠,會被截斷,所以使用16位有符號資料。

 

convertScaleAbs() --  轉回uint8形式,否則將無法顯示影象,而只是一副灰色影象 
addWeighted() --  組合影象

函式原型:

 

dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])

src -- 原影象

 

dst -- 目標影象

alpha  -- 伸縮係數

beta  --  累加到結果上的一個值
 

 

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])  

alpha  --  第一幅圖片中元素的權重

 

beta  --  第二個權重
gamma   --  累加到結果上的一個值

 

效果影象: