Pythonは画像の外側の境界追跡操作を実装します

いくつかのpython実装コードを共有する

#! /usr/bin/env python
# coding=utf-8import cv2
 
img = cv2.imread("trace_border2.bmp")[img_h, img_w, img_channel]= img.shape
 
trace =[]
start_x =0
start_y =0
 
gray = img[:,:,1]for h inrange(img_h):for w inrange(img_w):if(gray[h,w]128):
  gray[h,w]=255else:
  gray[h,w]=0
 
# Pythonは複数のループから飛び出します
# https://www.cnblogs.com/xiaojiayu/p/5195316.html
classgetoutofloop(Exception): pass
try:for h inrange(img_h -2):for w inrange(img_w -2):if gray[h,w]==0:
  start_x = w
  start_y = h
  raise getoutofloop
except getoutofloop:
 pass
 
print("Start Point (%d %d)"%(start_x, start_y))
trace.append([start_x, start_y])
 
# 8 近所の時計回りの検索
neighbor =[[-1,-1],[0,-1],[1,-1],[1,0],[1,1],[0,1],[-1,1],[-1,0]]
neighbor_len =len(neighbor)
 
# 現在のポイントの左上から開始します。
# 左上も黒い点の場合(境界点):
#  検索方向を反時計回りに90i回転します-=2
# そうでなければ:
#  検索方向を時計回りに45i+=1
i =0
cur_x = start_x + neighbor[i][0]
cur_y = start_y + neighbor[i][1]
 
is_contour_point =0try:whilenot((cur_x == start_x)and(cur_y == start_y)):
 is_contour_point =0while is_contour_point ==0:
  # neighbor_x = cur_x +if gray[cur_y, cur_x]==0:
  is_contour_point =1
  trace.append([cur_x, cur_y])
  i -=2if i <0:
   i += neighbor_len
  else:
  i +=1if i  = neighbor_len:
   i -= neighbor_len
  # print(i)
  cur_x = cur_x + neighbor[i][0]
  cur_y = cur_y + neighbor[i][1]
except:print("throw error")for i inrange(len(trace)-1):
 cv2.line(img,(trace[i][0],trace[i][1]),(trace[i+1][0], trace[i+1][1]),(0,0,255),3)
 cv2.imshow("img", img)
 cv2.waitKey(10)
 
cv2.rectangle(img,(start_x, start_y),(start_x +20, start_y +20),(255,0,0),2)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyWindow("img")

検索プロセス、赤いマーキングラインは次のとおりです。

補足知識:Pythonはターゲット追跡を実現します(opencv)

1. 単一ターゲット追跡

import cv2
importsys(major_ver, minor_ver, subminor_ver)=(cv2.__version__).split('.')print(major_ver, minor_ver, subminor_ver)if __name__ =='__main__':
 # トラッカーを作成する
 tracker_type ='MIL'
 tracker = cv2.TrackerMIL_create()
 # ビデオで読む
 video = cv2.VideoCapture("./data/1.mp4")
 # 最初のフレームで読む
 ok, frame = video.read()if not ok:print('Cannot read video file')
 sys.exit()
 # バウンディングボックスを定義する
 bbox =(287,23,86,320)
 bbox = cv2.selectROI(frame, False)
 # 最初のフレームで初期化します
 ok = tracker.init(frame, bbox)while True:
 ok, frame = video.read()if not ok:break
 # Start timer
 timer = cv2.getTickCount()
 # Update tracker
 ok, bbox = tracker.update(frame)
 # Cakculate FPS
 fps = cv2.getTickFrequency()/(cv2.getTickCount()- timer)
 # Draw bonding box
 if ok:
  p1 =(int(bbox[0]),int(bbox[1]))
  p2 =(int(bbox[0]+ bbox[2]),int(bbox[1]+ bbox[3]))
  cv2.rectangle(frame, p1, p2,(255,0,0),2,1)else:
  cv2.putText(frame,"Tracking failed detected",(100,80), cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,0,255),2)
 # ディスプレイトラッカータイプ
 cv2.putText(frame, tracker_type+"Tracker",(100,20), cv2.FONT_HERSHEY_SIMPLEX,0.75,(50,170,50),2)
 # FPSを表示
 cv2.putText(frame,"FPS:"+str(fps),(100,50), cv2.FONT_HERSHEY_SIMPLEX,0.75,(50,170,50),2)
 # Result
 cv2.imshow("Tracking", frame)
 
 # Exit
 k = cv2.waitKey(1)&0xffif k ==27:break

2. マルチターゲットトラッキング

GOTURNをトラッカーとして使用する場合、実行するには、goturn.caffemodelとgoturn.prototxtを作業ディレクトリに配置する必要があります。問題を解決するためのリンクはhttps://stackoverflow.com/questions/48802603/getting-deep-learning-tracker-goturn-to-です。 run-opencv-python

import cv2
importsys(major_ver, minor_ver, subminor_ver)=(cv2.__version__).split('.')print(major_ver, minor_ver, subminor_ver)if __name__ =='__main__':
 # トラッカーを作成する
 # ' BOOSTING','MIL','KCF','TLD','MEDIANFLOW','GOTURN','MOSSE'
 tracker_type ='MIL'
 tracker = cv2.MultiTracker_create()
 # ウィンドウを作成
 cv2.namedWindow("Tracking")
 # ビデオで読む
 video = cv2.VideoCapture("./data/1.mp4")
 # 最初のフレームで読む
 ok, frame = video.read()if not ok:print('Cannot read video file')
 sys.exit()
 # バウンディングボックスを定義する
 box1 = cv2.selectROI("Tracking", frame)
 box2 = cv2.selectROI("Tracking", frame)
 box3 = cv2.selectROI("Tracking", frame)
 # 最初のフレームで初期化します
 ok = tracker.add(cv2.TrackerMIL_create(), frame, box1)
 ok1 = tracker.add(cv2.TrackerMIL_create(), frame, box2)
 ok2 = tracker.add(cv2.TrackerMIL_create(), frame, box3)while True:
 ok, frame = video.read()if not ok:break
 # Start timer
 timer = cv2.getTickCount()
 # Update tracker
 ok, boxes = tracker.update(frame)print(ok, boxes)
 # Cakculate FPS
 fps = cv2.getTickFrequency()/(cv2.getTickCount()- timer)for box in boxes:
  # Draw bonding box
  if ok:
  p1 =(int(box[0]),int(box[1]))
  p2 =(int(box[0]+ box[2]),int(box[1]+ box[3]))
  cv2.rectangle(frame, p1, p2,(255,0,0),2,1)else:
  cv2.putText(frame,"Tracking failed detected",(100,80), cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,0,255),2)
 # ディスプレイトラッカータイプ
 cv2.putText(frame, tracker_type+"Tracker",(100,20), cv2.FONT_HERSHEY_SIMPLEX,0.75,(50,170,50),2)
 # FPSを表示
 cv2.putText(frame,"FPS:"+str(fps),(100,50), cv2.FONT_HERSHEY_SIMPLEX,0.75,(50,170,50),2)
 # Result
 cv2.imshow("Tracking", frame)
 
 # Exit
 k = cv2.waitKey(1)&0xffif k ==27:break

上記の画像の外側の境界追跡操作のpython実装は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。

Recommended Posts

Pythonは画像の外側の境界追跡操作を実装します
Pythonは画像スティッチングを実装しています
Pythonはパノラマ画像スティッチングを実装しています
Pythonは画像スティッチング機能を実装しています
Pythonファイル操作
python操作kafka
Pythonはスーパーマリオを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはtic-tac-toeゲームを実装しています
Python画像認識OCR
Pythonはマンマシンゴバンを実装します
PythonはTetrisゲームを実装しています
Python操作SQLiteデータベース
Pythonはminesweeperゲームを実装しています
Pythonはスキャンツールを実装しています
Python操作yaml命令
Pythonはしきい値回帰を実装します
Pythonは電子辞書を実装しています
Pythonは推測ゲームを実装しています