日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opencv笔记(十三)——图像的梯度

發(fā)布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv笔记(十三)——图像的梯度 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目標(biāo)

  • 認識圖像梯度、邊界
  • 學(xué)習(xí)函數(shù)cv2.Sobel(),cv2.Schar(),cv2.Laplacian()

原理

? 圖像梯度可以把圖像看成二維離散函數(shù),圖像梯度其實就是這個二維離散函數(shù)的求導(dǎo)。OpenCV提供三種類型的梯度濾波器或高通濾波器,Sobel,Scharr和Laplacian.

Sobel 和 Scharr 算子

Sobel算子是結(jié)合了高斯平滑與微分運算的結(jié)合方法,所以它的抗噪聲能力很強,其是普通一階差分,是基于尋找梯度強度。每一個算子分別對應(yīng)這x和y這兩個方向的模板,故在代碼中要分別在兩個方向上處理,最后用cv2.addWeighted(...)函數(shù)將其組合起來。

Sobel算子

Sobel函數(shù)原型如下:

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

前四個是必須的參數(shù):

  • 第一個參數(shù)是需要處理的圖像;
  • 第二個參數(shù)是圖像的深度(數(shù)據(jù)類型),-1表示采用的是與原圖像相同的深度。目標(biāo)圖像的深度必須大于等于原圖像的深度;
  • dx和dy表示的是求導(dǎo)的階數(shù),0表示這個方向上沒有求導(dǎo),一般為0、1、2;

其后是可選的參數(shù):

  • ksize是Sobel算子的大小,必須為1、3、5、7。如果ksize=-1,那么一個3*3的scharr濾波器會被使用;
  • delta是一個可選的增量,將會加到最終的dst中,同樣,默認情況下沒有額外的值加到dst中;
  • borderType是判斷圖像邊界的模式。這個參數(shù)默認值為cv2.BORDER_DEFAULT;

Laplacian算子

拉普拉斯算子是常用的邊緣檢測算子,它是各向同性的二階導(dǎo)數(shù)。

計算公式卷積核

代碼實踐

Sobel算子:

# coding=utf-8 import cv2 import numpy as npimg = cv2.imread("/home/wl/1.jpg", 0)x = cv2.Sobel(img, cv2.CV_16S, 1, 0) y = cv2.Sobel(img, cv2.CV_16S, 0, 1)absX = cv2.convertScaleAbs(x) # 轉(zhuǎn)回uint8 absY = cv2.convertScaleAbs(y)dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)while(1):cv2.imshow("absX", absX)cv2.imshow("absY", absY)cv2.imshow("Result", dst)k = cv2.waitKey(1) & 0XFFif k==ord('q'):break; cv2.destroyAllWindows()

原圖:

效果圖:

Laplacian算子:

# coding=utf-8 import cv2 import numpy as npimg = cv2.imread("/home/wl/1.jpg", 0) laplacian=cv2.Laplacian(img,cv2.CV_64F) dst = cv2.convertScaleAbs(laplacian) #轉(zhuǎn)回uint8 while(1):cv2.imshow("Result",dst)k = cv2.waitKey(1) & 0XFFif k==ord('q'):break; cv2.destroyAllWindows()

效果圖:

注意點

?? 代碼看了的話,會發(fā)現(xiàn)我們的sobel函數(shù)的第二個參數(shù)(數(shù)據(jù)類型)會換成cv2.CV_16S或cv2.CV_64F,最后再變回uint8。這是因為從黑到白的邊界點的導(dǎo)數(shù)是正數(shù),而從白到黑是負數(shù),如果還是使用uint8,那么所有的負數(shù)都會變?yōu)?,即被截斷。

轉(zhuǎn)載于:https://www.cnblogs.com/longwhite/p/10397752.html

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Opencv笔记(十三)——图像的梯度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。