<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      opencv筆記(車輛識別實現)

      Posted on 2022-12-06 18:24  呱呱呱呱嘰里呱啦  閱讀(463)  評論(0)    收藏  舉報

      opencv筆記(車輛計數實現)

      注意:更準確的車輛計數實現應考慮深度學習。

      基本實現思路

      1. 加載視頻
      2. 通過形態學識別車輛
      3. 對車輛進行統計
      4. 顯示車輛統計信息

      涉及知識

      • 窗口展示
      • 圖像/視頻加載
      • 基本圖形的繪制
      • 車輛識別
        • 基本圖像運算與處理
        • 形態學
        • 輪廓查找

      分步驟代碼

      加載視頻

      import cv2
      
      
      # 創建窗口對象
      cv2.namedWindow('video', cv2.WINDOW_NORMAL)
      cap = cv2.VideoCapture('2.mp4')
      
      while 1:
          ok, frame = cap.read()
          if ok:
              # 窗口顯示
              cv2.imshow('video', frame)
              key = cv2.waitKey(1)
              if key == 27 or cv2.getWindowProperty('color', cv2.WND_PROP_VISIBLE) < 1.0:
                  break
          else:
              break
      
      # 釋放資源
      cap.release()
      cv2.destroyAllWindows()
      

      通過形態學識別車輛

      import cv2
      
      # 車輛過濾條件應根據參照物適配,此處僅為演示原理
      min_w = 100
      min_h = 100
      
      line_high = 200
      line_width = 6
      
      cv2.namedWindow('video', cv2.WINDOW_AUTOSIZE)
      cap = cv2.VideoCapture('6.ts')
      bs = cv2.createBackgroundSubtractorMOG2()
      kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
      cars = []
      while 1:
          ok, frame = cap.read()
          if ok:
              # 轉換繪圖圖
              cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
              # 高斯去噪
              blur = cv2.GaussianBlur(frame, (3, 3), 5)
              # 去除背景
              mask = bs.apply(blur)
              # 腐蝕
              erode = cv2.erode(mask, kernel, iterations=2)
              # 膨脹
              dilate = cv2.dilate(erode, kernel, iterations=2)
              # 閉運算
              close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)
              close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)
      
              # 查找輪廓
              contours, _ = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
      
              # 過濾、繪制輪廓,車輛計數
              for contour in contours:
                  x, y, w, h = cv2.boundingRect(contour)
                  # 過濾
                  if w < min_w or h < min_h:
                      continue
                  # 繪制輪廓
                  cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
      
              cv2.imshow('video', frame)
              key = cv2.waitKey(42)
              if key == 27:
                  break
          else:
              break
      
      # 釋放資源
      cap.release()
      cv2.destroyAllWindows()
      

      對車輛進行統計

      import cv2
      
      # 車輛過濾條件應根據參照物適配,此處僅為演示原理
      min_w = 100
      min_h = 100
      
      # 檢測線高度、誤差
      line_high = 190
      line_offset = 5
      
      cv2.namedWindow('video', cv2.WINDOW_AUTOSIZE)
      cap = cv2.VideoCapture('6.ts')
      bs = cv2.createBackgroundSubtractorMOG2()
      kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
      car_count = 0
      while 1:
          ok, frame = cap.read()
          if ok:
              # 轉換繪圖圖
              cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
              # 高斯去噪
              blur = cv2.GaussianBlur(frame, (3, 3), 3)
              # 去除背景
              mask = bs.apply(blur)
              # 腐蝕
              erode = cv2.erode(mask, kernel, iterations=3)
              # 膨脹
              dilate = cv2.dilate(erode, kernel, iterations=3)
              # 閉運算
              close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)
              close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)
              # 查找輪廓
              contours, _ = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
              # 繪制檢測線
              cv2.line(frame, (0, line_high), (frame.shape[1], line_high), (255, 0, 0), 3)
              # 過濾、繪制輪廓,車輛計數
              for contour in contours:
                  x, y, w, h = cv2.boundingRect(contour)
                  # 過濾
                  if w < min_w or h < min_h:
                      continue
      
                  # 搜集有效車輛(此處有邏輯限制:車輛不能停止于檢測線區域內)
                  center = y + h / 2
                  if line_high - line_offset < center < line_high + line_offset:
                      car_count += 1
                      # 繪制輪廓
                      cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
      
              cv2.imshow('video', frame)
              key = cv2.waitKey(42)
              if key == 27:
                  break
          else:
              break
      # 釋放資源
      cap.release()
      cv2.destroyAllWindows()
      

      顯示車輛統計信息

      import cv2
      
      # 車輛過濾條件應根據參照物適配,此處僅為演示原理
      min_w = 100
      min_h = 100
      
      # 檢測線高度、誤差
      line_high = 150
      line_offset = 3
      
      cv2.namedWindow('video', cv2.WINDOW_AUTOSIZE)
      cap = cv2.VideoCapture('6.ts')
      bs = cv2.createBackgroundSubtractorMOG2()
      kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
      car_count = 0
      while 1:
          ok, frame = cap.read()
          if ok:
              # 轉換繪圖圖
              cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
              # 高斯去噪
              blur = cv2.GaussianBlur(frame, (3, 3), 3)
              # 去除背景
              mask = bs.apply(blur)
              # 腐蝕
              erode = cv2.erode(mask, kernel, iterations=3)
              # 膨脹
              dilate = cv2.dilate(erode, kernel, iterations=3)
              # 閉運算
              close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)
              close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)
              # 查找輪廓
              contours, _ = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
              # 繪制檢測線
              cv2.line(frame, (0, line_high), (frame.shape[1], line_high), (255, 0, 0), 3)
              # 過濾、繪制輪廓,車輛計數
              for contour in contours:
                  x, y, w, h = cv2.boundingRect(contour)
                  # 過濾
                  if w < min_w or h < min_h:
                      continue
                  # 搜集有效車輛(此處有邏輯限制:車輛不能停止于檢測線區域內,準確計數應該為每輛車提供唯一標識)
                  center = y + h / 2
                  if line_high - line_offset < center < line_high + line_offset:
                      car_count += 1
                      # 繪制輪廓
                      cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
              cv2.putText(frame, f'Cars: {car_count}', (300, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 3)
              cv2.imshow('video', frame)
              key = cv2.waitKey(42)
              if key == 27:
                  break
          else:
              break
      # 釋放資源
      cap.release()
      cv2.destroyAllWindows()
      
      主站蜘蛛池模板: 成人国产精品中文字幕| 亚洲AV成人无码久久精品| √天堂资源网最新版在线| 99精品国产兔费观看久久99| 国产精品综合色区av| 女人张开腿无遮无挡视频| 国产中年熟女高潮大集合| 亚洲久久色成人一二三区| 精品国产综合一区二区三区| 风韵丰满熟妇啪啪区老老熟妇| 无码人妻丝袜在线视频| 欧美成人精品三级网站视频| 麻豆国产传媒精品视频| 老女老肥熟国产在线视频| 激情四射激情五月综合网| 白嫩少妇无套内谢视频| 极品美女扒开粉嫩小泬图片| 久久亚洲精品天天综合网| 免费又大粗又爽又黄少妇毛片| 午夜人成免费视频| 国产成人午夜在线视频极速观看| 日韩欧美亚洲综合久久| 福利一区二区在线播放| 人妻va精品va欧美va| 成年黄页网站大全免费无码| 国产永久免费高清在线| 国产精品一二三区久久狼| 久久99精品久久久学生| 最近中文字幕日韩有码| 欧美人与动牲交精品| 丝袜人妖av在线一区二区| 中文熟妇人妻av在线| 精品久久精品久久精品九九| 91麻精品国产91久久久久| 17岁日本免费bd完整版观看| 亚洲欧洲一区二区综合精品| 久久人体视频| 色综合伊人色综合网站| 中文字幕av无码免费一区| 亚洲a∨国产av综合av下载| 国产精品一码在线播放|