欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python檢測動態(tài)物體顏色過程解析

 更新時間:2019年12月04日 10:17:00   作者:Python學習啊  
這篇文章主要介紹了基于Python檢測動態(tài)物體顏色過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

本篇文章將通過圖片對比的方法檢查視頻中的動態(tài)物體,并將其中會動的物體定位用cv2矩形框圈出來。本次項目可用于樹莓派或者單片機追蹤做一些思路參考。尋找動態(tài)物體也可以用來監(jiān)控是否有人進入房間等等場所的監(jiān)控。不僅如此,通過對物體的像素值判斷分類,達到判斷動態(tài)物體總體顏色的效果。

引言

物體檢測,是一種基于目的幾何學和統(tǒng)計資料特點的影像拆分,它將目的的拆分和辨識,其準確度和實時性是整個該系統(tǒng)的一項最重要戰(zhàn)斗能力。特別是在是在簡單橋段中的,必須對多個目的展開實時處理時,目的系統(tǒng)會萃取和辨識就變得尤其最重要。

隨著計算機的持續(xù)發(fā)展和計算機系統(tǒng)感官基本原理的應用,建模數(shù)據(jù)處理新技術(shù)對目的展開動態(tài)追蹤研究工作更加受歡迎,對目的展開靜態(tài)動態(tài)追蹤整合在信息化公交系統(tǒng)、人工智能監(jiān)視該系統(tǒng)、軍事戰(zhàn)略目的檢驗及藥學導航系統(tǒng)手術(shù)后中的手術(shù)器械整合等各個方面具備普遍的應用于商業(yè)價值。

開始前的準備

而這里顯然我們沒必要做到如此高深的地步,而是借助python和OpenCV通過圖片相減的方法找到動態(tài)物體,然后根據(jù)像素值的大小判斷其中的均值顏色。

import cv2
import numpy as np
import collections
import time

下面是讀取攝像頭:

camera = cv2.VideoCapture(0)

做一些開始前的準備,包括循環(huán)次數(shù),攝像頭內(nèi)容讀入,保存上一幀的圖片作為對比作差找到動態(tài)物體,然后定義框架的長和寬。

firstframe = None
a=0
ret0,frame0 = camera.read()
cv2.imwrite("1.jpg",frame0)
x, y, w, h = 10,10,100,100

下面是定義顏色的部分代碼,比如定義的黑色,可以參照hsv表進行拓展,如圖所示

然后可以知道黑色的最低值為0,0,0,最大值為180,255,46然后建立數(shù)組存儲顏色數(shù)據(jù),通過字典達到映射效果。

# 處理圖片
def get_color(frame):
  print('go in get_color')
  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  maxsum = -100
  color = None
  color_dict = getColorList()
  for d in color_dict:
    mask = cv2.inRange(frame, color_dict[d][0], color_dict[d][1])
    cv2.imwrite(d + '.jpg', mask)
    binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
    binary = cv2.dilate(binary, None, iterations=2)
    img, cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    sum = 0
    for c in cnts:
      sum += cv2.contourArea(c)
    if sum > maxsum:
      maxsum = sum
      color = d 
return color

圖像處理

緊接著是圖像處理,其中包括轉(zhuǎn)為灰度圖,讀取顏色字典,然后腐化膨脹操作。

# 處理圖片
def get_color(frame):
  print('go in get_color')
  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  maxsum = -100
  color = None
  color_dict = getColorList()
  for d in color_dict:
    mask = cv2.inRange(frame, color_dict[d][0], color_dict[d][1])
    cv2.imwrite(d + '.jpg', mask)
    binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
    binary = cv2.dilate(binary, None, iterations=2)
    img, cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    sum = 0
    for c in cnts:
      sum += cv2.contourArea(c)
    if sum > maxsum:
      maxsum = sum
      color = d 
return color

圖片相減的辦法

然后是圖片相減找到動態(tài)物體的代碼,每循環(huán)5次保存一次圖片,時間是很短的不用擔心。然后通過absdiff函數(shù)對圖片像素值作差找到動態(tài)物體,接著講像素值相減非零的部分用矩形框圈出來。

while True:
  ret, frame = camera.read()
  if not ret:
    break
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  gray = cv2.GaussianBlur(gray, (21, 21), 0)
  a=a+1
  if a%5==0:
    cv2.imwrite("1.jpg", frame)
  firstframe=cv2.imread("1.jpg")
  firstframe= cv2.cvtColor(firstframe, cv2.COLOR_BGR2GRAY)
  firstframe= cv2.GaussianBlur(firstframe, (21, 21), 0)
  frameDelta = cv2.absdiff(firstframe, gray)
  thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
  thresh = cv2.dilate(thresh, None, iterations=2)
  # cnts= cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

  x, y, w, h = cv2.boundingRect(thresh)
  frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
  cv2.imshow("frame", frame)

因為保存圖片是每隔5次進行一次,在某個瞬間可能保存的圖片不存在等原因,所以需要通過try的方法避免錯誤,最終的演示效果文末有。

 try:
    ret0, frame0 = camera.read()
    cropped = frame0[y:y+h,x:x+w ] # 裁剪坐標為[y0:y1, x0:x1]
    cv2.imwrite("3.jpg", cropped)

    frame1 = cv2.imread(filename)
    print(get_color(frame1))
    # plt.title(label[model.predict_classes(image)], fontproperties=myfont)
    imgzi = cv2.putText(frame, get_color(frame1), (30, 30), cv2.FONT_HERSHEY_COMPLEX, 1.2,
              (255, 255, 255), 2)
    cv2.imwrite("2.jpg", imgzi)
    cv2.imshow("frame", cv2.imread("2.jpg"))
  except:
    pass

  key = cv2.waitKey(1) & 0xFF

  if key == ord("q"):
    break

camera.release()

其最終演示效果如圖所示:

至此,動態(tài)物體檢測代碼基本實現(xiàn)。其中的拓展功能可以按照自己的需求進行修改、

目標檢測的發(fā)展

下面就將目標檢測發(fā)展做個簡單介紹,感興趣的朋友可以多多學習。

目標檢驗對于生物來說非常艱難,通過對照片中的有所不同色調(diào)組件的感官很更容易整合并歸類出有其中目標物體,但對于計算機系統(tǒng)來說,面臨的是像素分辨率行列式,難以從影像中的必要獲得貓和狗這樣的基本概念并整合其方位,再行再加通常多個物體和凌亂的復雜背景夾雜在一同,目標檢驗更為艱難。但這難不倒生物學家們,在現(xiàn)代感官各個領(lǐng)域,目的檢驗就是一個十分受歡迎的研究工作朝向,一些特定目的的檢驗,比如圖片檢驗和天橋檢驗早已有十分成熟期的新技術(shù)了。一般來說的目標檢驗也有過很多的試圖,但是視覺效果常常不錯。現(xiàn)代的目的檢驗一般用于轉(zhuǎn)動視窗的構(gòu)建,主要還包括三個方法:

借助有所不同大小的轉(zhuǎn)動視窗框住圖中的某一部分作為候選區(qū)域內(nèi);

萃取候選區(qū)域內(nèi)涉及的感官特點。比如圖片檢驗常見的Harr特點;天橋檢驗和一般來說目的檢驗常見的HOG特點等;

借助決策樹展開辨識,比如常見的SVM建模。

目的檢驗的第一步是要做到區(qū)域提名(region Proposal),也就是找到有可能的有興趣區(qū)域內(nèi)(region In Risk, ROI)。區(qū)域提名類似透鏡字符識別(OCR)各個領(lǐng)域的重復,OCR重復常見過重復方式,非常簡單說道就是盡可能磨碎到小的相連(比如小的筆劃之類),然后再行根據(jù)鄰接塊的一些親緣特點展開拆分。但目的檢驗的單純比起OCR各個領(lǐng)域千差萬別,而且三維點狀,大小不等,所以一定高度上可以說道區(qū)域提名是比OCR重復更難的一個難題。

區(qū)域提名有可能的方式有:

一、轉(zhuǎn)動視窗。轉(zhuǎn)動視窗事物上就是窮舉法,借助有所不同的時間尺度和長方形比把所有有可能的大大小小的塊都窮舉出來,然后送來去辨識,辨識出來機率大的就留下。很顯著,這樣的方式復雜性太低,造成了很多的校驗候選區(qū)域內(nèi),在現(xiàn)實生活中不不切實際。

二、比賽規(guī)則塊。在窮舉法的為基礎(chǔ)展開了一些剪枝,只搭配相同的尺寸和長方形比。這在一些特定的應用于橋段是很有效地的,比如照片搜題App小猿搜題中的的簡化字檢驗,因為簡化字方方正正,長方形比多數(shù)較為完全一致,因此用比賽規(guī)則塊做到區(qū)域內(nèi)獎提名是一種較為適合的自由選擇。但是對于一般來說的目的檢驗來說,比賽規(guī)則塊仍然必須采訪很多的方位,復雜性低。

三、特異性搜尋。從神經(jīng)網(wǎng)絡的視角來說,后面的方式解任是不俗了,但是精確度不錯,所以難題的架構(gòu)在于如何有效除去校驗候選區(qū)域內(nèi)。只不過校驗候選區(qū)域內(nèi)多數(shù)是再次發(fā)生了重合,特異性搜尋借助這一點,自底向上拆分鄰接的重合區(qū)域內(nèi),從而增加校驗。

區(qū)域內(nèi)獎提名非常只有以上所說的三種方式,實質(zhì)上這塊是靈活的,因此變型也很多,感興趣的閱讀不妨參照一下歷史文獻,最終介紹到此結(jié)束。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論