博客專欄

        EEPW首頁 > 博客 > 迅為RK3568開發(fā)板Scharr濾波器算子邊緣檢測

        迅為RK3568開發(fā)板Scharr濾波器算子邊緣檢測

        發(fā)布人:紅李亞 時間:2023-10-09 來源:工程師 發(fā)布文章
        本小節(jié)代碼在配套資料“iTOP-3568 開發(fā)板\03_【iTOP-RK3568 開發(fā)板】指南教程\04_OpenCV 開發(fā)配套資料\33”目錄下,如下圖所示:

        在 Sobel 算子算法函數(shù)中,如果設(shè)置 ksize=-1 就會使用 3x3 的 Scharr 濾波器。Scharr 算子是 Soble 算子在 ksize=3 時的優(yōu)化,與 Soble 的速度相同,且精度更高。Scharr 算子與 Sobel

        算子的不同點是在平滑部分,其中心元素占的權(quán)重更重,相當(dāng)于使用較小標(biāo)準(zhǔn)差的高斯函數(shù),也就是更瘦高的模板。

        Scharr 算子的卷積核為:

        cv2.Scharr 函數(shù)功能:

        使用 Scharr 算子進(jìn)行邊緣檢測。

        函數(shù)原型:

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

        參數(shù)定義:

        dst 代表目標(biāo)圖像。

        src 代表原始圖像。

        ddepth 代表輸出圖像的深度。

        dx 代表 x 方向上的求導(dǎo)階數(shù)。

        dy 代表 y 方向上的求導(dǎo)階數(shù)。

        scale 代表計算導(dǎo)數(shù)值時所采用的縮放因子,默認(rèn)情況下該值是 1,是沒有縮放的。

        delta 代表加在目標(biāo)圖像 dst 上的值,該值是可選的,默認(rèn)為 0。

        borderType 代表邊界樣式。

        實驗:

        實驗要求:

        使用 cv2.Scharr 函數(shù),分別對 x 軸和 y 軸進(jìn)行邊緣檢測,隨后使用 cv2.addWeighted 函數(shù)以 0.5:0.5 的比例將兩個圖像進(jìn)行融合,最后使用 cv2.imshow()函數(shù)對原圖和邊緣檢測的三個圖像進(jìn)行展示

        實驗步驟:

        首先進(jìn)入到 ubuntu 的終端界面將“iTOP-3568 開發(fā)板\03_【iTOP-RK3568 開發(fā)板】指南教程\04_OpenCV 開發(fā)配套資料\33”路徑下的 number.png 拷貝到 ubuntu 虛擬機(jī)上,拷貝完成如

        下圖所示:

        然后來到 ubuntu 虛擬機(jī)的終端界面,輸入以下命令來創(chuàng)建 demo33_Scharr.py 文件,如下圖所示:

        vim demo33_Scharr.py

        然后向該文件中添加以下內(nèi)容:

        1 import cv2 #opencv 的縮寫為 cv2,導(dǎo)入 opencv
        2 img = cv2.imread('number.png',1) #flags 參數(shù)為 1,返回彩色圖像
        3 cv2.imshow('原圖',img)#通過 cv2.imshow()函數(shù)展示原圖
        4 scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)# 使用 Sobel 算子進(jìn)行邊緣檢測,數(shù)據(jù)類型設(shè)置為 cv2.CV_64F,只算 x
        5 方向梯度,Sobel 核大小設(shè)置為 3
        6 scharrx = cv2.convertScaleAbs(scharrx) # 計算絕對值
        7 cv2.imshow('scharrx',scharrx)#通過 cv2.imshow()函數(shù)展示 x 方向梯度邊緣檢測計算之后的圖像
        8 scharry = cv2.Scharr(img,cv2.CV_64F,0,1) #使用 Sobel 算子進(jìn)行邊緣檢測,數(shù)據(jù)類型設(shè)置為 cv2.CV_64F,只算 x
        9 方向梯度,Sobel 核大小設(shè)置為 3
        10 scharry = cv2.convertScaleAbs(scharry) #計算絕對值
        11 cv2.imshow('scharry',scharry)#通過 cv2.imshow()函數(shù)展示 y 方向梯度邊緣檢測計算之后的圖像
        12 scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0) # 圖像融合的系數(shù)比為 0.5:0.5,0 表示偏置項
        13 cv2.imshow('sobelxy',scharrxy)#通過 cv2.imshow()函數(shù)展示融合之后的圖像
        14 cv2.waitKey(0)#等待下一次按鍵按下
        15
        第 1 行導(dǎo)入了 opencv 庫;
        第 2 行使用了 imread()函數(shù)對 number.png 圖片進(jìn)行讀取;
        第 3 行使用了 imshow()函數(shù)對原圖像進(jìn)行展示;
        第 4 行使用 Scharr 算子進(jìn)行邊緣檢測計算,數(shù)據(jù)類型設(shè)置為 cv2.CV_64F,只算 x 方向梯度;
        第 8 行使用 Scharr 算子進(jìn)行邊緣檢測計算,數(shù)據(jù)類型設(shè)置為 cv2.CV_64F,只算 y 方向梯度;
        第 6 行和第 10 行使用了 convertScaleAbs()函數(shù)獲取絕對值,并將圖像轉(zhuǎn)換為 8 位;
        第 7 行和第 11 行使用了 imshow()函數(shù)對兩個方向梯度進(jìn)行邊緣檢測計算之后的圖像進(jìn)行展示;
        第 12 行使用了 addWeighted()函數(shù)進(jìn)行圖像融合,兩個圖像的融合系數(shù)比為 0.5:0.5;
        第 14 行使用了 imshow()函數(shù)對融合之后的圖像進(jìn)行展示;
        第 15 行使用了 waitKey()函數(shù),持續(xù)顯示展示照片直到按鍵的按下。
        保存退出之后,在終端界面中輸入以下命令進(jìn)行 python 代碼的運行,運行結(jié)果如下圖所示:
        python demo33_Scharr.py

        第 1 張圖為原圖,一個數(shù)獨圖像被顯示了出來,第 2 張圖像為 x 軸方向梯度經(jīng)過邊緣檢測計算的圖像,可以看到縱向的線條被很好的區(qū)分了出來,第 3 張圖像為 y 軸方向梯度經(jīng)過邊緣

        檢測計算的圖像,可以看到橫向的線條被很好的區(qū)分了出來,第 4 張圖像為兩張邊緣計算圖像的融合,可以看到圖像的邊緣特點被很好的展現(xiàn)了出來。至此 Scharr 算子邊緣計算相關(guān)的實驗就結(jié)束了。

        更多文檔可以查看

        B站搜索-北京迅為RK3568開發(fā)板,

        公眾Hao關(guān)注:北京迅為,


        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



        關(guān)鍵詞: 開發(fā)板

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 邓州市| 无棣县| 双辽市| 崇仁县| 汪清县| 彭山县| 迭部县| 滦平县| 金乡县| 勐海县| 中西区| 阜新| 峨山| 沙湾县| 贵州省| 方山县| 莎车县| 志丹县| 十堰市| 泰宁县| 衡东县| 乌拉特中旗| 怀集县| 从化市| 乾安县| 周至县| 泌阳县| 肃北| 宁国市| 兰溪市| 宜君县| 凤台县| 嘉黎县| 灵丘县| 临高县| 沙雅县| 综艺| 鸡西市| 尚志市| 枞阳县| 延寿县|