python如何实现图像外边界跟踪?本篇文章小编给大家分享一下python实现图像外边界跟踪代码示例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

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如何实现图像外边界跟踪 python实现图像外边界跟踪代码示例...相关推荐

  1. python读取多张图片_python读取图片的几种方式及图像宽和高的存储顺序

    python读取图片的几种方式及图像宽和高的存储顺序 1.opencv 2.imageio 3.matplotlib 4.scipy # coding:utf-8 import cv2 import ...

  2. python有哪些代码_Python有哪些神一般的蜜汁操作?(附代码),

    Python有哪些神一般的蜜汁操作?(附代码), 有人说,"Python除了不会生孩子,Python从撩妹到装x,无所不能!什么都会!" 下载视频?我用Python; 玩跳一跳?我 ...

  3. 初学者怎样看懂python代码_Python零基础入门-(如何让人读懂你的代码)文档注释

    目标注释的作用 单行注释(行注释) 多行注释(块注释) 01. 注释的作用使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性 02. 单行注释(行注释)以 # 开头,# 右边的所有 ...

  4. python识别数字程序_python实现识别手写数字 python图像识别算法

    写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且因为在编写的过程中,把前面的一些逻辑也修改了一些,将其变得更 ...

  5. 如何用python爬股票数据_python爬虫股票数据,如何用python 爬虫抓取金融数据

    Q1:如何用python 爬虫抓取金融数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为 ...

  6. 怎么用python画个电脑_python语言还是java如何用python画爱心

    用python绘制爱心的基本步骤如下: 002pc.com对<python语言还是java如何用python画爱心>总结来说,为我们学习Python很实用. 首先先下载安装好python程 ...

  7. python底层源码_Python每天一分钟:解析python底层类的实现原理——竟然是type()

    上一篇文章中,我们介绍了使用python的type()函数来动态创建用户类的详细过程,读者可以自行翻看:Python每天一分钟:类定义进阶/炫技-使用type函数动态创建类. 那么本文将进一步介绍py ...

  8. python编程入门免费_python编程入门 零基础学习Python基础(附带最新免费教程)...

    本篇是面向编程零基础学员的Python入门教程,内容涵盖了Python的基础知识和初步应用.以较轻快的风格,向零基础学习者介绍了一门时下比较流行的.并且用途比较广泛的编程语言.同时,其语法简洁而清晰, ...

  9. python语言基本认识_Python基础语法合集——了解python

    1.  了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象的编程技术).动态数据类型的交互式(可在命令行中通过Python ...

  10. python入门教材论坛_Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare ============= *Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐* ------------------------ 本文 ...

最新文章

  1. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1124. 骑马修栅栏:欧拉路径、dfs
  2. 今年美国广告程序化购买支出将超252亿美元
  3. [云炬创业基础笔记]第十一章创业计划书测试8
  4. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
  5. shell批量创建随机文件名格式文件
  6. Codeforces Round #727 (Div. 2) E. Game with Cards dp + 思维
  7. 楼天成夺Facebook黑客杯季军,已被Facebook录用得到美国绿卡
  8. Sublime格式化代码快捷键
  9. 没有肉眼可见的躯体,却丝毫不妨碍放飞灵魂
  10. 【shell批量删除ovs网桥命令】
  11. APP设计尺寸规范大全,APP界面设计新手教程【官方版】
  12. 除了Jira、禅道还有哪些更好的敏捷开发过程管理平台?
  13. 50道正则表达式面试题目,你能答对几道?
  14. 学生免费领取阿里云ECS云服务器并使用全过程(部署个人博客项目)
  15. MYSQL事务原理分析
  16. 华为交换机重制_FAQ:5700能否通过reset按键清空配置
  17. 机械手使用者坐标系和工具坐标系_EPSON机械手 工具坐标系的标定
  18. 高等数学——二重积分
  19. 恢复计算机在哪,电脑360文件恢复工具在哪
  20. 自适应网站(不用任何框架实现)

热门文章

  1. 自定义帆软报表的导出
  2. MySQL数据库和表名大小写敏感开关的打开办法
  3. 【转】C++中的inline用法
  4. 获取和设置消息队列的属性msgctl,删除消息队列
  5. POJ-2152 Fire (树形DP)
  6. android 进程间通信---bind的前世
  7. ASP.NET-第三天-加强课程
  8. mybatis关联查询之一对多,多对一,以及多对多
  9. 5-5图层的链接-新版本不常用
  10. 一些C#实用的方法汇总