91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

通過 Python 和 OpenCV 實現目標數量監控

發布時間:2020-09-14 08:02:19 來源:腳本之家 閱讀:271 作者:Python學習啊 欄目:開發技術

今天我們將利用python+OpenCV實現對視頻中物體數量的監控,達到視頻監控的效果,比如洗煤廠的監控水龍頭的水柱顏色,當水柱為黑色的超過了一半,那么將說明過濾網發生了故障。當然不僅如此,我們看的是圖像視頻處理的技巧,你也可以將項目遷移到其他地方等,這僅僅是一個例子而已。我們知道計算機視覺中關于圖像識別有四大類任務:


分類-Classification:解決“是什么?”的問題,即給定一張圖片或一段視頻判斷里面包含什么類別的目標。

定位-Location:解決“在哪里?”的問題,即定位出這個目標的的位置。

檢測-Detection:解決“是什么?在哪里?”的問題,即定位出這個目標的的位置并且知道目標物是什么。

分割-Segmentation:分為實例的分割(Instance-level)和場景分割(Scene-level),解決“每一個像素屬于哪個目標物或場景”的問題。

而定位不僅需要找到物體的位置在哪里,還需要能夠統計目標的數目以及物體狀態。

除了圖像分類以外,目標檢驗要解決問題的架構難題是:

1.目標有可能經常出現在影像的任何方位;

2.目標有各種有所不同的尺寸;

3.目標有可能有各種有所不同的外形。

如果用矩形框來界定目的,則長方形有有所不同的清晰度。由于目的的清晰度有所不同,因此使用經典之作的轉動視窗+影像圖形的計劃解決問題標準化目的檢驗難題的生產成本太低。近幾年來,目標檢測算法取得了很大的突破。比較流行的算法可以分為兩類,一類是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN等),它們是two-stage的,需要先算法產生目標候選框,也就是目標位置,然后再對候選框做分類與回歸。而另一類是Yolo,SSD這類one-stage算法,其僅僅使用一個卷積神經網絡CNN直接預測不同目標的類別與位置。第一類方法是準確度高一些,但是速度慢,但是第二類算法是速度快,但是準確性要低一些。那么今天我們的項目并不會太多的講解各種算法,而是我們的核心主題,目標數量識別。

那么我們將如何進行實現呢

多說無益,下面可以開始實現我們的項目。

首先導入相關的庫

import cv2
from PIL import Image
from PIL import ImageDraw,ImageFont
import numpy as np

接著我們需要把水龍頭流出水柱的部分提取出來,即需要把圖片預先處理成這樣,作為背景圖來用,名為3ji.jpg如圖所示:

通過 Python 和 OpenCV 實現目標數量監控

然后通過圖像作差的方法找到水柱的部分,首先就需要將圖像轉彩灰度圖然后高斯模糊便于計算,當然其實不這樣也是可以的。其中2.jpg是測試的圖片,

通過 Python 和 OpenCV 實現目標數量監控

代碼如下:

'''3ji是背景圖不可換,調試換另一個圖片,3ji自己用畫圖找到水的位置清除掉水柱即可,所以說攝像頭不能動'''
firstframe=cv2.imread("3ji.jpg")
firstframe= cv2.cvtColor(firstframe, cv2.COLOR_BGR2GRAY)
firstframe= cv2.GaussianBlur(firstframe, (21, 21), 0)
secondframe0=cv2.imread("2.jpg")
secondframe0= cv2.cvtColor(secondframe0, cv2.COLOR_BGR2GRAY)
secondframe= cv2.GaussianBlur(secondframe0, (21, 21), 0)
frameDelta = cv2.absdiff(firstframe, secondframe)
x,y=frameDelta.shape
print(x,y)

接著通過邊緣檢測找到水柱邊界,方便查看。

#frameDelta和canny一個是區域一個是輪廓
img = cv2.GaussianBlur(frameDelta,(3,3),0)
canny = cv2.Canny(img, 0, 100)

定義水柱總面積變量。清水面積變量,ss數組存儲像素值位置

area=0 #6687,總面積
qingarea=0
ss=[]

然后畫出輪廓,并記錄水柱處像素值得位置

#畫輪廓,存儲要識別的像素值位置,記錄在ss數組中
for i in range(x):
  for j in range(y):
   if any(frameDelta[i,j]!=[0,0,0]):#白色的時候,占位
    ss.append([i,j])

然后以原圖加輪廓圖顯示,圖片相加即可:

canny0=cv2.add(secondframe0,canny)

接著根據像素值大小判斷顏色,通過調試這個項目的閾值是50

#判斷水柱顏色,清水占多少像素
for t in ss:
 k,l=t
 area=area+1
 if canny0[k, l] > 50:
  print(canny0[k,l])
  qingarea+=1
接著統計黑色水柱占比率為多少
deta=(qingarea/area)*100
print(qingarea)
pred="清水占比為"+str(deta)+"%"
print(pred)

最后輸出圖像結果:

cv2.imwrite("pred.jpg",canny0)
canny0=cv2.imread("pred.jpg")
img_PIL = Image.fromarray(cv2.cvtColor(canny0, cv2.COLOR_BGR2RGB))
myfont = ImageFont.truetype(r'C:/Windows/Fonts/simfang.ttf', 40)
draw = ImageDraw.Draw(img_PIL)
draw.text((200, 10), pred, font=myfont, fill=(255,23,140))
img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)
cv2.imshow("frame", img_OpenCV)
key = cv2.waitKey(0)

最終達到的演示效果如圖所示:

清水占比96%,還是比較準確的

通過 Python 和 OpenCV 實現目標數量監控

清水占比38%,黑水占比62%,也基本準確。

通過 Python 和 OpenCV 實現目標數量監控

當然這僅僅是一個思路的問題,至少目前為止網上還沒有對物體數目去監控的項目例子,盡管并不是如此高深,但是卻是一個很好的探究方向。不僅僅是智能采礦的需要,也可以是智能農業或者智能畜牧業等方面監控的一個想法。當然大家也是可以再次基礎上修改完善代碼,完整的代碼上面已經給出。伴隨著移動互聯網、手機及各交友的平臺的較慢持續發展,照片的廣泛傳播幅度大大增強,廣泛傳播范圍內也日益擴展。比起書寫、視頻、錄像等廣泛傳播方式,照片廣泛傳播極具“點睛”視覺效果,合乎節奏貧困下人們高效的讀者方法。

當照片給人們帶給快捷的數據紀錄和共享方法的同時,照片普遍地廣泛傳播在社會大眾視線下,適當的難題也接踵而來。書寫記述,使用者可以精彩通過關鍵字搜尋提供意愿數據,而當照片記述,使用者難以必要通過搜尋照片索引到可借助數據。

科技進步的變革常常與解決的表達意見如影隨形,在使用者痛點下,亟需高科技的改進創意,此自然環境下涌現的圖像識別新技術之后變得尤為重要。由此也可見計算機視覺的日益高漲的地位。

總結

以上所述是小編給大家介紹的通過 Python 和 OpenCV 實現目標數量監控,希望對大家有所幫助!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 澄城县| 玉屏| 华安县| 普陀区| 巴彦淖尔市| 翼城县| 成安县| 白银市| 阿坝| 镇江市| 乌鲁木齐县| 察雅县| 湖南省| 贵定县| 沧州市| 宁明县| 雅江县| 江阴市| 石首市| 封丘县| 凤冈县| 湾仔区| 赤水市| 兴海县| 乡宁县| SHOW| 中卫市| 侯马市| 北宁市| 榆社县| 榆树市| 青铜峡市| 镇沅| 陆丰市| 建瓯市| 望都县| 黎城县| 华宁县| 乡宁县| 盐边县|