python实现图像外边界跟踪操作


Posted in Python onJuly 13, 2020

share一些python实现的code

#!/usr/bin/env python
#coding=utf-8
 
import 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 in range(img_h):
  for w in range(img_w):
    if (gray[h,w] > 128):
      gray[h,w] = 255
    else:
      gray[h,w] = 0
 
#python 跳出多重循环
#https://www.cnblogs.com/xiaojiayu/p/5195316.html
class getoutofloop(Exception): pass
try:
  for h in range(img_h - 2):
    for w in range(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)
 
#先从当前点的左上方开始,
# 如果左上方也是黑点(边界点):
#     搜索方向逆时针旋转90 i-=2
# 否则:
#     搜索方向顺时针旋转45 i+=1
i = 0
cur_x = start_x + neighbor[i][0]
cur_y = start_y + neighbor[i][1]
 
is_contour_point = 0
 
try:
  while not ((cur_x == start_x) and (cur_y == start_y)):
    is_contour_point = 0
    while 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 -= 2
        if i < 0:
          i += neighbor_len
      else:
        i += 1
        if 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 in range(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实现图像外边界跟踪操作

补充知识:python实现目标跟踪(opencv)

1.单目标跟踪

import cv2
import sys
 
(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()
  # 定义一个bounding box
  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)
    # 展示tracker类型
    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) & 0xff
    if 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
import sys
 
(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()
  # 定义一个bounding box
  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)
    # 展示tracker类型
    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) & 0xff
    if k ==27 : break

以上这篇python实现图像外边界跟踪操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现对一个完整url进行分割的方法
Apr 29 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 Python
Python中协程用法代码详解
Feb 10 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
详解python中的json和字典dict
Jun 22 Python
Python3 max()函数基础用法
Feb 19 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
django 多数据库及分库实现方式
Apr 01 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 Python
Python实现打包成库供别的模块调用
Jul 13 #Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 #Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 #Python
Python使用pyexecjs代码案例解析
Jul 13 #Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 #Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 #Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 #Python
You might like
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
javascript中length属性的探索
2011/07/31 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
Python3安装Scrapy的方法步骤
2017/11/23 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
软件测试面试题
2015/10/21 面试题
社会实践自我鉴定
2013/11/07 职场文书
医院实习接收函
2014/01/12 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
代办出身证明书
2014/10/21 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python