Opencv之邊緣檢測Sobel濾波

2021-08-25 17:16:11 字數 1952 閱讀 7190

一、sobel函式

二、對垂直/水平方向邊緣檢測

三、對垂直和水平方向邊緣檢測

# 利用sobel方法可以進行sobel邊緣檢測 #

sobelx = cv2.sobel(img,cv2.cv_64f, 1, 0, ksize=3)

img表示源影象,即進行邊緣檢測的影象

cv2.cv_64f表示64位浮點數即64float。這裡不使用numpy.float64,因為可能會發生溢位現象

第三和第四個引數分別是對x和y方向的導數(即dx,dy),這裡1表示對x求偏導,0表示不對y求導。其中,x還可以求2次導。

注意:對x求導就是檢測垂直方向的邊緣,對y求導是檢測水平方向的邊緣

第五個引數ksize是指核的大小。

這裡說明一下,這個引數的前四個引數都沒有給誰賦值,而ksize則是被賦值的物件。實際上,這時可省略的引數,而前四個是不可省的引數。注意其中的不同點

import cv2

# step1 讀入灰度圖

# step2 高斯模糊處理

blur_car = cv2.gaussianblur(initial_car,(5,5),0)

#step3 sobel計算水平導數

sobel_car = cv2.sobel(blur_car,cv2.cv_16s,1,0)

sobel_car = cv2.convertscaleabs(sobel_car) #轉回uint8

cv2.imshow('now',sobel_car)

cv2.waitkey(0)

上述**對x求導,即檢測了垂直方向的邊緣

使用cv2.sobel(img,cv2.cv_16s,0,1)可以實現對y求一階導,即對水平方向進行檢測

我們不是使用

cv2.sobel(blur_car,cv2.cv_16s,1,1)
而是通過,先對水平方向邊緣檢測,在對垂直方向邊緣檢測,最後利用加權相加的方式實現對垂直和水平方向進行邊緣檢測

import cv2

# step1 讀入灰度圖

# step2 高斯模糊處理

blur_car = cv2.gaussianblur(initial_car,(5,5),0)

#step3 sobel計算水平導數

sobel_car1 = cv2.sobel(blur_car,cv2.cv_16s,1,0)

sobel_car2 = cv2.sobel(blur_car,cv2.cv_16s,0,1)

sobel_car1 = cv2.convertscaleabs(sobel_car1) #轉回uint8

opencv之邊緣檢測

canny檢測 發展 canny 的目標是找到乙個最優的邊緣檢測演算法,最優邊緣檢測的含義是 好的檢測 演算法能夠盡可能多地標識出影象中的實際邊緣。好的定位 標識出的邊緣要盡可能與實際影象中的實際邊緣盡可能接近。最小響應 影象中的邊緣只能標識一次,並且可能存在的影象雜訊不應標識為邊緣。為了滿足這些要...

Opencv 邊緣檢測

2018 7 5 凌晨 萬萬要認真,今晚抄書都能抄錯,是在該打。書上的一行 graysrc cv2.cvtcolor blurredsrc,cv2.color bgr2gray 硬生生被我抄成了 graysrc cv2.cvtcolor blurredsrc,cv2.color bayer bgr2...

opencv 邊緣檢測

include stdafx.h include using namespace cv using namespace std int edgethresh 1 宣告 原始,灰度,和 canny邊緣 mat image,cedge mat gray,edge void ontrackbar int,...