成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python Opencv實(shí)現(xiàn)停車位識(shí)別思路詳解

89542767 / 635人閱讀

  小編寫這篇文章的一個(gè)主要目的,主要是給大家就相關(guān)的具體內(nèi)容做出一些詳細(xì)解答,比如了解使用python的相關(guān)知識(shí),主要是涉及到python Opencv的一些相關(guān)知識(shí),比如使用python Opencv實(shí)現(xiàn)停車位識(shí)別,就具體的內(nèi)容,下面給大家詳細(xì)解答下。


  1.怎么去實(shí)現(xiàn)


 ?。?)第一是需要用到一個(gè)處理畫框的程序,將圖片中的有車和無(wú)車的停車位給畫出來(lái),并且保存坐標(biāo)(如果畫錯(cuò)了,將鼠標(biāo)移至要?jiǎng)h除的框中,右擊鼠標(biāo),即可刪除);


  #定義回調(diào)函數(shù)
  def mouseClick(events,x,y,flags,params):
  #按下鼠標(biāo)左鍵,將點(diǎn)擊的坐標(biāo)(x,y)保存到position列表中
  if(events&cv2.EVENT_LBUTTONDOWN==cv2.EVENT_LBUTTONDOWN):
  position.append((x,y))
  #按下鼠標(biāo)右鍵時(shí),移除選中的框
  if(events&cv2.EVENT_RBUTTONDOWN==cv2.EVENT_RBUTTONDOWN):
  for i,pos in enumerate(position):
  (x1,y1)=pos
  if(x1<x<x1+img_width and y1<y<y1+img_height):
  position.pop(i)

01.png

  (2)畫好之后,關(guān)閉窗口,即可看到已經(jīng)保存好坐標(biāo)的文件,下次再運(yùn)行程序時(shí),不用再畫框;程序會(huì)讀出當(dāng)前文件,將之前保存好的坐標(biāo)加載出畫出框。


  #首先查看文件是否已經(jīng)包含了CarParkPos文件


  try:
  with open('CarParkPos','rb')as fp:
  position=pickle.load(fp)
  except:
  #存儲(chǔ)所有停車位的坐標(biāo)列表
  position=[]

02.png

  (3)主程序的思路


  將攝像頭讀取的圖片進(jìn)行處理


  Opencv基礎(chǔ)知識(shí)點(diǎn):


  https://www.jb51.net/article/254006.htm


  高斯去噪:


  https://www.jb51.net/article/198212.htm


  局部二值化:


  https://www.jb51.net/article/248000.htm


  中值濾波:


  https://www.jb51.net/article/198212.htm


  Opencv中獲取卷積核:


  https://www.jb51.net/article/254013.htm


  腐蝕操作:


  https://www.jb51.net/article/214725.htm


  #轉(zhuǎn)換為灰度圖
  gray=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2GRAY)
  #高斯去噪
  gauss=cv2.GaussianBlur(src=gray,ksize=(3,3),sigmaX=0)
  #圖像二值化處理
  thresh=cv2.adaptiveThreshold(src=gauss,maxValue=255,adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
  thresholdType=cv2.THRESH_BINARY_INV,blockSize=21,C=16)
  #中值濾波操作
  median=cv2.medianBlur(src=thresh,ksize=3)
  #腐蝕操作
  dilate=cv2.dilate(src=median,kernel=kernel,iterations=1)


  for pos in position:
  (x,y)=pos
  mask=dilate[y:y+img_height,x:x+img_width]
  #cv2.imshow(str(x*y),mask)
  #返回灰度值不為0的像素?cái)?shù),可用來(lái)判斷圖像是否全黑。
  count=cv2.countNonZero(mask)
  #當(dāng)計(jì)算的count低于800,表示是一個(gè)空位
  if count<800:
  countBlackCar+=1
  color=(0,255,0)
  thickness=3
  else:
  color=(0,0,255)
  thickness=2
  cv2.rectangle(img=frame,pt1=(pos[0],pos[1]),
  pt2=(pos[0]+img_width,pos[1]+img_height),
  color=color,thickness=thickness)
  cvzone.putTextRect(img=frame,text=str(count),pos=(x+3,y+img_height-5),
  scale=0.8,thickness=1,offset=0,colorR=color)


  參考視頻教程:https://www.bilibili.com/video/BV14Z4y1Q7au?t=3992.0(建議看懂視頻中的思路)


  2.整體代碼實(shí)戰(zhàn)

03.png

 (1)ParkingSpacePicker.py


  import os
  import cv2
  import pickle
  #首先查看文件是否已經(jīng)包含了CarParkPos文件
  try:
  with open('CarParkPos','rb')as fp:
  position=pickle.load(fp)
  except:
  #存儲(chǔ)所有停車位的坐標(biāo)列表
  position=[]
  #停車位的高寬
  img_width,img_height=47,88
  #定義回調(diào)函數(shù)
  def mouseClick(events,x,y,flags,params):
  #按下鼠標(biāo)左鍵,將點(diǎn)擊的坐標(biāo)(x,y)保存到position列表中
  if(events&cv2.EVENT_LBUTTONDOWN==cv2.EVENT_LBUTTONDOWN):
  position.append((x,y))
  #按下鼠標(biāo)右鍵時(shí),移除選中的框
  if(events&cv2.EVENT_RBUTTONDOWN==cv2.EVENT_RBUTTONDOWN):
  for i,pos in enumerate(position):
  (x1,y1)=pos
  if(x1<x<x1+img_width and y1<y<y1+img_height):
  position.pop(i)
  with open('CarParkPos','wb')as fp:
  pickle.dump(position,fp)
  while True:
  img=cv2.imread('images/packing.png')
  for pos in position:
  cv2.rectangle(img=img,pt1=(pos[0],pos[1]),
  pt2=(pos[0]+img_width,pos[1]+img_height),
  color=(0,255,0),thickness=2)
  cv2.imshow('Packing',img)
  #設(shè)置鼠標(biāo)事件
  cv2.setMouseCallback('Packing',mouseClick)
  key=cv2.waitKey(1)
  if key==27:
  break
  cv2.destroyAllWindows()
  if __name__=='__main__':
  print('Pycharm')


 ?。?)main.py


  import os
  import cv2
  import pickle
  import cvzone
  with open('CarParkPos','rb')as fp:
  position=pickle.load(fp)
  #停車位的高寬
  img_width,img_height=47,88
  cap=cv2.VideoCapture('video/packing-3.mp4')
  def checkParkingSpace(dilate):
  countBlackCar=0
  for pos in position:
  (x,y)=pos
  mask=dilate[y:y+img_height,x:x+img_width]
  #cv2.imshow(str(x*y),mask)
  #返回灰度值不為0的像素?cái)?shù),可用來(lái)判斷圖像是否全黑。
  count=cv2.countNonZero(mask)
  #當(dāng)計(jì)算的count低于800,表示是一個(gè)空位
  if count<800:
  countBlackCar+=1
  color=(0,255,0)
  thickness=3
  else:
  color=(0,0,255)
  thickness=2
  cv2.rectangle(img=frame,pt1=(pos[0],pos[1]),
  pt2=(pos[0]+img_width,pos[1]+img_height),
  color=color,thickness=thickness)
  cvzone.putTextRect(img=frame,text=str(count),pos=(x+3,y+img_height-5),
  scale=0.8,thickness=1,offset=0,colorR=color)
  return countBlackCar
  #獲取卷積核
  kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(3,3))
  while cap.isOpened():
  #循環(huán)播放視頻文件
  if cap.get(cv2.CAP_PROP_POS_FRAMES)==cap.get(cv2.CAP_PROP_FRAME_COUNT):
  cap.set(cv2.CAP_PROP_POS_FRAMES,0)
  ret,frame=cap.read()
  #frame=cv2.resize(src=frame,dsize=(750,600))
  height,width,channel=frame.shape
  if not ret:
  break
  #轉(zhuǎn)換為灰度圖
  gray=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2GRAY)
  #高斯去噪
  gauss=cv2.GaussianBlur(src=gray,ksize=(3,3),sigmaX=0)
  #圖像二值化處理
  thresh=cv2.adaptiveThreshold(src=gauss,maxValue=255,adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
  thresholdType=cv2.THRESH_BINARY_INV,blockSize=21,C=16)
  #中值濾波操作
  median=cv2.medianBlur(src=thresh,ksize=3)
  #腐蝕操作
  dilate=cv2.dilate(src=median,kernel=kernel,iterations=1)
  cntCar=checkParkingSpace(dilate)
  cvzone.putTextRect(img=frame,text="BlackPosition:"+str(cntCar),
  pos=(20,height-80),scale=1.0,thickness=2)
  cv2.imshow('img',frame)
  #cv2.imshow('thresh',thresh)
  #cv2.imshow('median',median)
  #cv2.imshow('dilate',dilate)
  key=cv2.waitKey(30)
  if key==27:
  break
  cv2.destroyAllWindows()
  if __name__=='__main__':
  print('Pycharm')


 ?。?)視頻效果

04.png

  停車位識(shí)別演示


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給各位讀者帶來(lái)一定的幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128392.html

相關(guān)文章

  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • opencv+mtcnn+facenet+python+tensorflow 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別

    摘要:實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別本文記錄了在學(xué)習(xí)深度學(xué)習(xí)過(guò)程中,使用,開發(fā)環(huán)境為,實(shí)現(xiàn)局域網(wǎng)連接手機(jī)攝像頭,對(duì)目標(biāo)人員進(jìn)行實(shí)時(shí)人臉識(shí)別,效果并非特別好,會(huì)繼續(xù)改進(jìn)這里是項(xiàng)目地址項(xiàng)目中用到的大文件地址如果各位老爺看完覺(jué)得對(duì)你有幫助的話,請(qǐng)給個(gè)小星星,當(dāng)前時(shí)間 opencv+mtcnn+facenet+python+tensorflow 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別 Abstract:本文記錄了在學(xué)習(xí)深度學(xué)習(xí)過(guò)程中,...

    megatron 評(píng)論0 收藏0
  • 女朋友嫌我拍的照片有霧,連夜用OpenCV寫出??去霧算法??逃過(guò)一劫(收藏保命)

    ??歡迎訂閱《從實(shí)戰(zhàn)學(xué)python》專欄,用python實(shí)現(xiàn)爬蟲、辦公自動(dòng)化、數(shù)據(jù)可視化、人工智能等各個(gè)方向的實(shí)戰(zhàn)案例,有趣又有用!?? 更多精品專欄簡(jiǎn)介點(diǎn)這里 治愈生活的良方 就是保持對(duì)生活的熱愛(ài) 前言 哈嘍,大家好,我是一條。 每次和女朋友出去玩,拍照是必須的,天氣好還行,天氣要是不好,加上我這破手機(jī),那拍的簡(jiǎn)直慘不忍睹,自己都不過(guò)去。 但是沒(méi)什么能難倒程序員的,為了不挨罵,連夜寫出去霧...

    DTeam 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<