数字图像处理(实践篇)二 画出图像中目标的轮廓

目录

一 涉及的OpenCV函数

二 代码

三 效果图


一 涉及的OpenCV函数

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  
  • image:源图像。
  • mode:轮廓的检索方式。cv2.RETR_EXTERNAL检测外轮廓)、cv2.RETR_LIST(检测的轮廓不建立等级关系)、cv2.RETR_CCOMP(建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息)、cv2.RETR_TREE(建立一个等级树结构的轮廓)。
  • method:一般用 cv2.CHAIN_APPROX_SIMPLE,表示用尽可能少的像素点表示轮廓。cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1。
  • contours:图像轮廓坐标。list中每个元素都是图像中的一个轮廓,用numpy中的ndarray表示
  • hierarchy:返回值,包含有关图像轮廓的拓扑信息。[Next, Previous, First Child, Parent]。

二 代码

import cv2
import matplotlib.pyplot as plt
def dealImg(img):b, g, r = cv2.split(img)img_rgb = cv2.merge([r, g, b])return img_rgb
def dealImageResult(img_path):img = cv2.imread(img_path)img_copy = img.copy()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# OTSU方法实现前景与背景分割ret2, dst_OTSU = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)contours, hierarchy = cv2.findContours(dst_OTSU, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)contourPic = cv2.drawContours(img_copy, contours, -1, (0, 255, 0), 3)fig = plt.figure(figsize=(8, 8))titles = ["img", "gray", "OTSU", "contourPic"]img = dealImg(img)contourPic = dealImg(contourPic)images = [img, gray, dst_OTSU, contourPic]for i in range(4):plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])plt.show()fig.savefig('test_results.jpg', bbox_inches='tight')
if __name__ == '__main__':dealImageResult("1.png")pass

三 效果图

前文回顾

 入门篇目录

 数字图像处理(入门篇)一 图像的数字化与表示

 数字图像处理(入门篇)二 颜色空间

 数字图像处理(入门篇)三 灰度化

 数字图像处理(入门篇)四 像素关系

 数字图像处理(入门篇)五 图像数据预处理之颜色空间转换

 数字图像处理(入门篇)六 图像数据预处理之坐标变化

 数字图像处理(入门篇)七 图像数据预处理之灰度变化

 数字图像处理(入门篇)八 图像数据预处理之直方图

 数字图像处理(入门篇)九 图像数据预处理之滤波

 数字图像处理(入门篇)十 边缘检测

 数字图像处理(入门篇)十一 形态学处理

 数字图像处理(入门篇)十二 自适应阈值分割

 数字图像处理(入门篇)十三 仿射变换

 数字图像处理(入门篇)十四 透视变换

实践篇目录

数字图像处理(实践篇)一 将图像中的指定目标用bBox框起来吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216191.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app,nvue中text标签文本超出宽度不换行问题解决

复现:思路: 将text标签换为rich-text,并给rich-text增加换行的样式class类名解决:

Ubuntu中安装搜狗输入法教程(详细图文教程)

习惯了使用搜狗输入法,这里总结了Ubuntu系统下安装搜狗输入法的详细教程,每个步骤都很详细,耐心安装。 搜狗输入法是一款功能强大、使用方便的输入法,能够有效提升用户在Ubuntu系统中的输入体验。 目录 一、下载搜狗安装包1.1 搜…

STM32_7(ADC)

一、ADC ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,…

分享一个软件模拟USB,支持HID

文章目录 一、特性二、相对于替代解决方案的优势(1) 为什么不选择内置USB硬件的微控制器呢?(2) 与带 USB 硬件的微控制器相比的优势(3) 与单独的 USB 外设相比的优势(4) 与其他纯固件实现相比的优势 三、链接 一、特性 完全符合 USB 1.1 标准的低速设备&#xff0c…

【汉诺塔 —— (经典分治递归)】

汉诺塔 —— (经典分治递归) 一.汉诺塔介绍二.分治算法解决汉诺塔问题三.汉诺塔问题的代码实现四.主函数测试展示 一.汉诺塔介绍 汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一…

前端vue导出PPT,使用pptxgen.js

前言 公司新需求需要导出ppt给业务用,查阅资料后发现也挺简单的,记录一下。 如有不懂的可以留言!!! 1.安装包 npm install pptxgenjs --save2.引入包 在需要使用的文件中引入 import Pptxgenfrom "pptxgenjs&…

【计算机网络】(网络层)定长掩码和变长掩码

目录 1、IPV4地址的应用规划 2、例题分析 2.1、定长的子网掩码 2.2、变长的子网掩码 1、IPV4地址的应用规划 定长的子网掩码(FLSM): 使用同一个子网掩码划分子网,每个子网所分配的IP地址数量相同,造成IP地址的浪费…

小辰的智慧树(差分+前缀和)

登录—专业IT笔试面试备考平台_牛客网 1.考虑总长度之和不能超过m,2考虑限制每棵树高度不能低于ci,如果用二分最短输能截到的高度,还要另外去判断,是否每棵树mid都能严格大于ci ,这样容易超时,换个角度&…

DFS序和欧拉序的降维打击

1. DFS 序和时间戳 1.1 DFS 序 定义:树的每一个节点在深度优先遍历中进、出栈的时间序列。 如下树的 dfs 序就是[1,2,8,8,5,5,2,4,3,9,9,3,6,6,4,7,7,1]。 下图为生成DFS的过程。对于一棵树进行DFS序,除了进入当前节点时对此节点进行记录,…

Chem. Eng. J | 掌控基于ESIPT的AIE效应设计具有单组分白光发射的光学材料

今天为大家介绍一篇近期发表在Chemical Engineering Journal上的论文:Controlling ESIPT-based AIE effects for designing optical materials with single-component white-light emission。论文通讯作者为中南大学董界副教授和曾文彬教授,论文第一作者…

使用new Vue()的时候发生了什么?

前言 Vue.js是一个流行的JavaScript前端框架,用于构建单页面应用(SPA)和用户界面。当我们使用new Vue()来创建一个Vue实例时,Vue会执行一系列的初始化过程,将数据变成响应式,编译模板,挂载实例…

StarRocks Evolution:One Data,All Analytics

在 11 月 17 日举行的 StarRocks Summit 2023上,StarRocks TSC Member、镜舟科技 CTO 张友东详细介绍了 StarRocks 社区的发展情况,并全面解析了 StarRocks 的核心技术与未来规划;我们特意将他的精彩演讲整理出来,以帮助大家更深入…