壞件檢測項目(二)

下面是關於OpenCV的攝像頭的使用
先放上官方鏈接 OPENCV

OpenCV爲從攝像機捕捉實時流,提供了一個非常簡單的接口,讓我們從攝像機中捕獲一個視頻(可以是筆記本電腦內置的網絡攝像頭),將它轉換成灰度視頻並顯示出來。

要捕獲視頻,您需要創建一個VideoCapture對象。它的參數可以是設備索引,也可以是視頻文件的名稱。設備索引就是用來指定哪個攝像頭的數字。通常會連接一個攝像頭(就像我的情況一樣)。所以我只是傳遞0(或-1)您可以通過傳遞1等方式選擇第二個攝像頭。之後,您可以逐幀捕獲。但最後,不要忘記釋放俘虜。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # 獲取一幀
    ret, frame = cap.read()
    # 我們在座標系上的運算到這裏
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 轉灰
    # 顯示結果幀
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# 一切就緒,釋放捕獲
cap.release()
cv2.destroyAllWindows()

cap.read():
返回一個bool(真/假)。如果幀被正確讀取,它將爲真。可以通過檢查這個返回值來檢查視頻的結尾。
有時,cap可能沒有初始化捕獲。在這種情況下,這段代碼顯示錯誤。您可以通過cap. isopen()方法檢查它是否已初始化。如果是真的,好吧。否則使用cap.open()打開它。

cap.get(propId):
propId是一個從0到18的數字。每個數字表示視頻的一個屬性(如果它適用於該視頻),其中一些值可以使用cap.set(propId, value)進行修改。價值是你想要的新價值。

邊緣檢測算法:
傳統方法有canny算法,structure forests,以及HED算法

其中canny算法:
結果:
返回一個二值圖像,非零數值表示圖像中邊緣的存在,返回與邊緣相關的尺度和方向信息

檢測標準:不丟失重要的邊緣,不應有虛假的邊緣
定位標準:實際邊緣與檢測到的邊緣位置之間的偏差最小
單響應標準:將多個響應降低爲單個邊緣響應。這個標準可以解決受噪聲影響的邊緣問題,以及起到地址非平滑邊緣檢測算子的作用。

步驟:
先用高斯濾波器對圖像去噪,計算像素的梯度,在邊緣檢測的基礎上使用非最大抑制NMS,在檢測到的邊緣上使用雙double閾值去除假陽性,又被稱爲滯後閾值化處理,最後分析所有的邊緣以及其之間的連接,以保留真正的邊緣,並消除不明顯的邊緣。(一般這一步都會省略)

代碼如下:

import cv2
import numpy as np

v2.imread("img.jpg", 0) 
cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300)) 
cv2.imshow("canny", cv2.imread("canny.jpg"))
cv2.waitKey()
cv2.destroyAllWindows()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章