11-圖像梯度-Sobel算子

在這里插入圖片描述
圖像梯度是指圖像某像素在x和y兩個方向上的變化率(與相鄰像素比較),是一個二維向量,由2個分量組成,X軸的變化、Y軸的變化 。
其中X軸的變化是指當前像素右側(X加1)的像素值減去當前像素左側(X減1)的像素值。
同理,Y軸的變化是當前像素下方(Y加1)的像素值減去當前像素上方(Y減1)的像素值。

其實Sobel算子求梯度也是分為x軸方向和y軸方向,說白了就是將一個卷積核進行上下左右劃分,x軸方向上就是右?左,y軸方向上就是下?上

cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
第一個參數:當前的圖像對象名稱
第二個參數:當前圖像的深度,通常情況下指定為-1,表示輸出和輸入的深度是一樣的;cv2.CV_64F可以存6字節的大小,為了方便后面的取絕對值操作
第三個參數:是否算X軸的水平方向,若為1表示計算X軸方向,若為0表示不計算X軸方向
第四個參數:是否算Y軸的豎直方向,若為1表示計算Y軸方向,若為0表示不計算Y軸方向
第五個參數:ksize指定的卷積核是多大的,通常情況下都是奇數大小,例如:3×3的卷積核

import cv2
import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()#原圖:
img = cv2.imread('E:\Jupyter_workspace\study\data/pie.png',cv2.IMREAD_GRAYSCALE)
show_photo('img',img)#x軸方向
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)#這里的CV_64F可以存儲的位數很多,以便于后續的取絕對值操作
show_photo('sobelx',sobelx)
#由于右減左,下減上原則
#原圖左部分,右為圈內白色左為圈外黑色,白-黑結果為正,顯示
#原圖右部分,右為圈外黑色左為圈內白色,黑-白結果為負,不顯示#y軸方向
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)#這里的CV_64F可以存儲的位數很多,以便于后續的取絕對值操作
show_photo('sobely',sobely)
#由于右減左,下減上原則
#原圖下部分,下為圈內白色上為圈外黑色,白-黑結果為正,顯示
#原圖上部分,下為圈外黑色上為圈內白色,黑-白結果為負,不顯示

原圖:
在這里插入圖片描述

白到黑是正數,黑到白是負數,所有的負數都被截斷為0(顯示黑色),也就是只顯示一半的輪廓

x軸方向取梯度:
在這里插入圖片描述
y軸方向取梯度:
在這里插入圖片描述

故此時需要進行絕對值操作,為了將兩邊的輪廓都顯示出來
import cv2
import numpy as npdef show_photo(name,picture):#顯示圖像函數cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()#原圖:
img = cv2.imread('E:\Jupyter_workspace\study\data/pie.png',cv2.IMREAD_GRAYSCALE)
show_photo('img',img)#x軸方向,取絕對值
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
sobelx = cv2.convertScaleAbs(sobelx)#取絕對值
show_photo('sobelx',sobelx)#y軸方向,取絕對值
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)
sobely = cv2.convertScaleAbs(sobely)#取絕對值
show_photo('sobely',sobely)#分別計算x和y,再求和
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)#進行加權后相加,最好一個參數表示偏移量,一般默認為0
show_photo('sobelxy',sobelxy)#### 不建議直接計算,最后的效果并不是特別好
#### 需要求梯度的時候分別計算然后求和效果會好些
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1,ksize = 3)
sobelxy = cv2.convertScaleAbs(sobelxy)
show_photo('sobelxy',sobelxy)

原圖:
在這里插入圖片描述
x軸方向,取絕對值:
在這里插入圖片描述
y軸方向,取絕對值:
在這里插入圖片描述
分別計算x和y,再求和:
在這里插入圖片描述
直接計算:
不建議直接計算,最后的效果并不是特別好
需要求梯度的時候分別計算然后求和效果會好些
在這里插入圖片描述

換一張照片來進行梯度操作效果更明顯

import cv2
import numpy as npdef show_photo(name,picture):#顯示圖像函數cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',cv2.IMREAD_GRAYSCALE)
show_photo('img',img)#顯示原圖sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)#求X軸方向梯度
sobelx = cv2.convertScaleAbs(sobelx)#取絕對值
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)#求Y軸方向梯度
sobely = cv2.convertScaleAbs(sobely)#取絕對值
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)#加權相加
show_photo('sobelxy',sobelxy)#顯示整體梯度后的效果img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',cv2.IMREAD_GRAYSCALE)
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1,ksize = 3)#X軸和Y軸同時求方向梯度
sobelxy = cv2.convertScaleAbs(sobelxy)
show_photo('sobelxy',sobelxy)

原圖:
在這里插入圖片描述
分別對X軸方向求梯度和Y軸方向求梯度,然后加權求和:
在這里插入圖片描述
對X軸方向和Y軸方向同時求梯度:
在這里插入圖片描述

總結:對X軸和Y軸分別計算其梯度,然后加權求和效果會好些

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378725.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378725.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378725.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

給IE有效指定編碼

<title>下一站</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> IE每次打開&#xff0c;均是一片空白&#xff0c;查看右鍵&#xff0d;編碼&#xff0c;顯示是GB2312。要手功改為UTF-8后才能正常顯示頁面…

形態學操作——擊中擊不中變換

操作目的 HitMiss變換是形態檢測的一個工具&#xff0c;通過定義形狀模板可以在圖像中獲取同一形狀物體的位置坐標。 算法講解 1、用擊中結構去腐蝕原始圖像得到擊中結果X&#xff08;這個過程可以理解為在原始圖像中尋找和擊中結構完全匹配的模塊&#xff0c;匹配上了之后&…

stack.pop()方法_C.示例中的Stack.Pop()方法

stack.pop()方法C&#xff03;Stack.Pop()方法 (C# Stack.Pop() method) Stack.Pop() method is used to remove an object from the top of the stack. The method removes and returns the object from the top. Stack.Pop()方法用于從堆棧頂部刪除對象。 該方法從頂部刪除并…

java list的作用_集合框架(List集合的特有功能概述和測試)

package cn.itcast_03;import java.util.ArrayList;import java.util.List;/** List集合的特有功能&#xff1a;* A:添加功能* void add(int index,Object element):在指定位置添加元素* B:獲取功能* Object get(int index):獲取指定位置的元素* C:列表迭代器* ListIterator li…

12-圖像梯度-Scharr算子和laplacian算子

Scharr算子 cv2.Scharr(img,cv2.CV_64F,1,0) 第一個參數&#xff1a;當前的圖像對象名稱 第二個參數&#xff1a;當前圖像的深度&#xff0c;通常情況下指定為-1&#xff0c;表示輸出和輸入的深度是一樣的&#xff1b;cv2.CV_64F可以存6字節的大小&#xff0c;為了方便后面的取…

新的一年新希望,百忙中繼續學習

公司來了一批新同事&#xff0c;我又忙于購買設備&#xff0c;布置辦公桌了。 小林建議我找一份更合適的工作&#xff0c;目前的我其實是在混日子&#xff0c;因為我并不擅長溝通與銷售。 暫時還是保持這樣吧&#xff0c;我還需要一定時間來積蓄力量。 轉載于:https://www.cnbl…

Oracle Internal Event:10200 Consistent Read診斷事件

10200(consistent read buffer status)內部診斷事件可以用于探測一致性讀CR(consistent read)塊的訪問情況&#xff0c;雖然cr讀的統計信息可以從v$sysstat或AWR/statspack中獲取&#xff0c;但是10200 event還是我們研究Consistent Read一致性讀的有力工具。該事件可以通過在會…

多線程循環輸出abcc++_C ++循環| 查找輸出程序| 套裝4

多線程循環輸出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int A 5;int fun(){return A--;}int main(){int A 5;while (fun()) {cout << A ::A << " ";}return 0;}Output: 輸出&#xff1a; 9 8 7 6 5Explana…

Opencv——圖像金字塔與圖像尺寸縮放

主要講解 1、resize()函數調用 函數定義&#xff1a; 調用方式&#xff1a; resize(srcImage, dstImage, Size(64, 128)); //對圖片進行修改 resize(srcImage, dstImage, Size(), 0.5, 0.5);第6個參數的含義&#xff1a; INTER_NEAREST:最鄰近插值 (放大好用) INTER_ARE…

java nature_Java中BufferedReader和scanner的對比 - nature

原地址&#xff1a;http://blog.sina.com.cn/s/blog_5fd837410100rtwk.html Scanner 和BufferedReader同樣能實現將鍵盤輸入的數據送入程序&#xff0c; import java.io.*; import java.util.Scanner; public class C { public static void main(String []args) throws IOExcep…

13-Canny邊緣檢測

Canny邊緣檢測主要思路步驟如下&#xff1a; 1&#xff0c;使用高斯濾波器&#xff0c;以平滑圖像&#xff0c;濾除噪聲 2&#xff0c;計算圖像中每個像素點的梯度強度和方向 3&#xff0c;應用非極大值抑制&#xff0c;以消除邊緣檢測帶來的雜散響應 4&#xff0c;應用雙閾值檢…

c# uri.host_C#| Uri.IsHexEncoding()方法與示例

c# uri.hostUri.IsHexEncoding()方法 (Uri.IsHexEncoding() Method) Uri.IsHexEncoding() method is a static method or Uri class. Which is used to return that given string is hex-encoded or not? If the given string is hex coded then it returns true otherwise it…

一位老鳥對 23 種設計模式的有趣見解(轉)

在網絡上流暢很廣的一篇舊文&#xff0c;暫時沒找到原作者&#xff0c;目前所看到的最早轉載時間是 2005 年 2 月 28 日。作者用輕松的語言&#xff0c;形象解釋了 23 種模式&#xff0c;有很好的啟發作用。創建型模式 1、FACTORY—追MM少不了請吃飯了&#xff0c;麥當勞的雞翅…

微機原理——移位指令

例題 思路 選擇移位語句&#xff0c;右移&#xff0c;將AL移出的送入DX左端&#xff0c;將BL移出的送入DX左端。循環八次 MOV AL,01100101B; MOV BL,11011010B; XOR DX,DX;兩個值相同&#xff0c;異或結果為0。等效&#xff1a;MOV DX,0 MOV CX,8;count L1: SHR AL,1;邏輯右…

14-圖像金字塔

由第一個圖可知&#xff0c;圖像金字塔這無非就是對圖像進行放大和縮小罷了 1&#xff0c;高斯金字塔 向下采樣方法(縮小)&#xff0c;越采樣越小&#xff0c;即從金字塔底部向上采樣 cv2.pyrDown(img) 向上采樣方法(放大)&#xff0c;越采樣越大&#xff0c;即從金字塔頂…

JAVA和javascrito_JAVA 和JavaScript的split方法異同

Split的方法很常用&#xff0c;除了str.split("regex")&#xff0c;其實還可以多傳一個參數&#xff1a;str.split("regex", limit)。但是要注意&#xff0c;JavaScript和java的split中limit參數作用是不同的。簡單說&#xff0c;JavaScript中&#xff0c;…

如果__name__ =='__main__':在Python中怎么辦?

In order to understand the details of __name__ variable and the if condition, let us go through a simple exercise. Run a simple python file with just the following lines and run the file as python3 code, 為了了解__name__變量和if條件的詳細信息&#xff0c;讓…

Eclipse C/C++開發環境搭建

1 Eclipse的安裝 到http://java.sun.com/j2se/1.5.0/download.jsp 下載JRE安裝&#xff1b; 到http://eclipse.org下載Eclipse安裝。&#xff08;這兒可以下載Java版本的&#xff0c;也可以下載C/C 版本的&#xff09; 2 對于下載的Java版本或著只下載Eclipse IDE的&#xff0c…

微機原理——尋址方式總結

一、操作數的尋址方式 立即尋址方式 格式: 操作碼 數字表達式&#xff08;將數據送入寄存器中&#xff09; 源操作數可以是8位也可以是16位。 MOV AH, F5H &#xff08;字節操作&#xff09; F5H稱為立即數(8位操作數) MOV AL, 8AH &#xff08;字節操作&#xff09; 8AH稱為…

15-輪廓檢測

邊緣是零零散散的&#xff0c;而輪廓是一個整體 cv2.findContours(img,mode,method) img&#xff1a;輸入圖像對象名稱 mode&#xff1a;輪廓檢索模式 RETR_EXTERNAL&#xff1a;只檢索最外面的輪廓 RETR_LIST&#xff1a;檢索所有的輪廓&#xff0c;并將其保存到一條鏈表當中…