1. 程式人生 > >圖像邊緣識別檢測

圖像邊緣識別檢測

.org pre 函數 安裝 char src 伸縮 read .net

博主用的是python3,不過在結尾也有c++方法的地址,供大家參考學習,圖像邊緣識別需要安裝opencv。網上也有一部分人用的是PIL,我在查找了一些資料,並看了一些人的評論後決定用opencv,也推薦各位用。

我簡單的理解了一下圖像邊緣識別的方法,總結為以下幾點:

1、了解電腦中圖片的存儲方式

2、什麽是算子

3、獲取圖片像素——行數,列數,圖片的通道數(這是彩色圖片,灰度圖像沒有通道數)

4、進行圖片邊緣識別檢測

首先應該了解什麽是圖片,圖片有很多種,我並不完全懂,這裏我說一下256色圖片,256也就是2的8次方,在存儲的方式上使用一個字節,也就是8位0和1的二進制表示的,從0開始到255結束,所以說他是16色圖片數據量的兩倍。

詳見:https://baike.baidu.com/item/%E7%AE%97%E5%AD%90/970194?fr=aladdin

然後是算子,簡單來說就是一種映射,和我們中學學的函數並無區別。但是在圖像邊緣識別的方法中有兩個算子,根據我的理解,是分別計算得到縱向和橫向的灰度圖。

詳見:https://baike.baidu.com/item/%E7%AE%97%E5%AD%90/970194?fr=aladdin

首先我貼出我查看別人博客認為圖片邊緣識別最好的一版的代碼:

 1 import cv2;
 2 import numpy as np
 3 
 4 img = cv2.imread(r
圖片地址)

首先導入圖片數據。

 1 x = cv2.Sobel(img, cv2.CV_16S, 1, 0, ksize=-1)
 2 y = cv2.Sobel(img, cv2.CV_16S, 0, 1, ksize=-1)
 3 # ksize=-1 Scharr算子
 4 # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
 5 # 可選參數alpha是伸縮系數,beta是加到結果上的一個值,結果返回uint類型的圖像
 6 Scharr_absX = cv2.convertScaleAbs(x)  # convert 轉換  scale 縮放
7 Scharr_absY = cv2.convertScaleAbs(y) 8 result = cv2.addWeighted(Scharr_absX, 0.5, Scharr_absY, 0.5, 0) 9 blur = cv2.GaussianBlur(img, (3, 3), 0) # 用高斯濾波處理原圖像降噪 10 canny = cv2.Canny(blur, 50, 150) # 50是最小閾值,150是最大閾值 11 cv2.imshow(canny, canny) 12 cv2.waitKey(0) 13 cv2.destroyAllWindows()

效果非常給力,大家可以去嘗試,不要忘記import cv2,想更多了解的朋友推薦大家看一下我推薦的最後一個博客,非常多的方法都可以去嘗試。

代碼轉載自:https://blog.csdn.net/sunny2038/article/details/9202641

相關資料可查閱:

c++版本圖像邊緣檢測:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html(c++的,代碼流程可以用作參考)

python圖片像素的獲取:https://blog.csdn.net/mao_hui_fei/article/details/78217049

圖像邊緣識別: https://blog.csdn.net/qq_40962368/article/details/81416954(這個裏面的canny算子我沒有調試出來,不過別的方法也非常給力,大家可以看一下)

圖像邊緣識別檢測