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学习资料
Feb 08 Python
Python MySQLdb Linux下安装笔记
May 09 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
python抓取文件夹的所有文件
Feb 27 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
python hook监听事件详解
Oct 25 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
python 如何读、写、解析CSV文件
Mar 03 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
模拟xcopy的函数
2006/10/09 PHP
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
python中的__slots__使用示例
2015/02/26 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
python3抓取中文网页的方法
2015/07/28 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Python自带的IDE在哪里
2020/07/01 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
会计出纳员的自我评价
2014/01/15 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
小学四年级学生评语
2014/12/26 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
离婚民事起诉状
2015/08/03 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang