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编码类型转换方法详解
Jul 01 Python
Python模拟登陆实现代码
Jun 14 Python
python PyTorch预训练示例
Feb 11 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
python3中布局背景颜色代码分析
Dec 01 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 Python
Python 实现Mac 屏幕截图详解
Oct 05 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 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&amp;mysql(六)
2006/10/09 PHP
adodb与adodb_lite之比较
2006/12/31 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
打包发布Python模块的方法详解
2016/09/18 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python打印不合法的文件名
2020/07/31 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
新学期家长寄语
2014/01/19 职场文书
求职信格式要求
2014/05/23 职场文书
节能标语大全
2014/06/21 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
校本研修个人总结
2015/02/28 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
Go标准容器之Ring的使用说明
2021/05/05 Golang
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
python实现学生信息管理系统(面向对象)
2022/06/05 Python