当前位置: 首页 > wzjs >正文

国外创意海报设计网站做装修行业营销型网站

国外创意海报设计网站,做装修行业营销型网站,做得比较好的公司网站,镇江疾控紧急提醒在图像处理与计算机视觉领域,轮廓检测是一项极为关键的技术。轮廓作为物体边界的重要表征,承载了图像中物体的形状、尺寸和位置等关键信息。通过轮廓检测,我们能够提取出图像中物体的轮廓,为后续的物体识别、图像分割、形状分析等…

在图像处理与计算机视觉领域,轮廓检测是一项极为关键的技术。轮廓作为物体边界的重要表征,承载了图像中物体的形状、尺寸和位置等关键信息。通过轮廓检测,我们能够提取出图像中物体的轮廓,为后续的物体识别、图像分割、形状分析等任务提供有力支持。OpenCV 作为一款强大的计算机视觉库,提供了丰富且高效的轮廓检测工具。接下来,本文将深入探讨轮廓检测的原理,并结合 OpenCV 的代码示例,帮助大家更好地掌握这一技术。

一、轮廓检测简介

轮廓检测旨在寻找并提取图像中物体的边界,以一系列相连的点表示物体的轮廓。相较于边缘检测侧重于检测像素值的急剧变化,轮廓检测更关注物体的整体形状,通常作用于二值图像。通过将图像转换为二值图,凸显前景和背景的差异,为轮廓提取创造条件。在实际应用中,轮廓检测广泛应用于工业检测、安防监控、医学图像处理等领域。

二、轮廓检测流程

1. 图像预处理

在进行轮廓检测之前,通常需要对图像进行预处理,提升检测效果。常见的预处理操作包括灰度化、降噪、二值化等。灰度化将彩色图像转换为灰度图,简化后续处理;降噪通过滤波操作去除图像中的噪声干扰;二值化则将图像像素值划分为两个类别,生成前景和背景分明的二值图像。

2. 轮廓提取

OpenCV 提供了cv2.findContours()函数用于提取轮廓。该函数基于图像的像素值差异,寻找图像中的连续边界,将其转换为轮廓数据结构,为后续的轮廓分析提供数据支持。

3. 轮廓分析与绘制

提取轮廓后,我们可以对轮廓进行分析,如计算轮廓面积、周长,拟合形状等。此外,OpenCV 提供cv2.drawContours()函数,用于在原始图像或新图像上绘制轮廓,直观展示检测结果。

三、OpenCV 轮廓检测函数详解

 查找轮廓的API:image, contours, hierarchy = cv2.findContours(img, mode, method)#
    参数:img:需要实现轮廓检测的原图


    mode: 轮廓的检索模式,主要有四种方式:
            cv2.RETR_EXTERNAL:只检测外轮廓,所有子轮廓被忽略
            cv2.RETR_LIST:检测的轮廓不建立等级关系,所有轮廓属于同一等级
            cv2.RETR_CCOMP:返回所有的轮廓,只建立两个等级的轮廓。一个对象的外轮廓为第1级组织结构。
                      而对象内部中空洞的轮廓为第2级组织结构,空洞中的任何对象的轮廓又是第 1 级组织结构。
            cv2.RETR_TREE:返回所有的轮廓,建立一个完整的组织结构的轮廓。


    method:轮廓的近似方法,主要有以下两种:
            cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。
            cv2.CHAIN_APPROX_SIMPLE:压缩模式,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息。

提取轮廓

import cv2
phone = cv2.imread('phone.png')#读取原图
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)#灰度图的处理
cv2.imshow('phone_b',phone_gray)
cv2.waitKey(0)
# phone_gray=cv2.imread('phone.png',0)  #读取灰度图
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)#阈值处理为二值
# cv2.imshow('phone_binary',phone_binary)
# cv2.waitKey(0)_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)#这两行代码分别输出轮廓的层级结构和检测到的轮廓数量。
#hierarchy:它是一个形状为 (1, n, 4) 的三维数组,其中 n 代表检测到的轮廓数量
#contours:它是一个列表,列表中的每个元素代表一个检测到的轮廓。
# 通过 len(contours) 就能得到检测到的轮廓的数量。
#n就是len(contours)
print(hierarchy)
print(contours)
print(len(contours))

绘制轮廓

 cv2.drawContours(image, contours, contourIdx, color, thickness=None,lineType=None, hierarchy=None, maxLevel=None, offset=None)

轮廓的特征

获取轮廓后,通常基于轮廓的特征进行筛选、识别和处理。例如,基于轮廓的周长和面积对轮廓进行筛选,然后绘制筛选的目标轮廓或其最小外接矩形。

import cv2
phone = cv2.imread('phone.png')#读取原图
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)#灰度图的处理
cv2.imshow('phone_b',phone_gray)
cv2.waitKey(0)
# phone_gray=cv2.imread('phone.png',0)  #读取灰度图
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)#阈值处理为二值
cv2.imshow('phone_binary',phone_binary)
cv2.waitKey(0)#查找轮廓
_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)#轮廓面积
area_0=cv2.contourArea(contours[0])
print(area_0)area_1=cv2.contourArea(contours[1])
print(area_1)#轮廓周长
length=cv2.arcLength(contours[0],closed=True)
print(length)

轮廓的近似
approx = cv2.approxPolyDP(curve, epsilon, closed)
参数说明:
curve:输入轮廓。
epsilon:近似精度,即两个轮廓之间最大的欧式距离。该参数越小,得到的近似结果越接近实际轮廓;反之,得到的近似结果会更加粗略。
closed:布尔类型的参数,表示是否封闭轮廓。如果是 True,表示输入轮廓是封闭的,近似结果也会是封闭的;否则表示输入轮廓不是封闭的,近似结果也不会是封闭的。
返回值:approx:近似结果,是一个ndarray数组,为1个近似后的轮廓,包含了被近似出来的轮廓上的点的坐标

import cv2
phone=cv2.imread('duola.jpg')
phone_gray=cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)#二值化处理
ret,phone_thresh=cv2.threshold(phone_gray,180,255,cv2.THRESH_BINARY)# cv2.imshow('phone_thresh',phone_thresh)
# cv2.waitKey(0)#获取轮廓
contours=cv2.findContours(phone_thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)[-2]a_list=[]
for i in contours:if cv2.contourArea(i)>10000:a_list.append(i)
image=cv2.drawContours(image=phone,contours=a_list,contourIdx=-1,color=(0,255,0),thickness=2)
cv2.imshow('contours_show_10000',image)
cv2.waitKey(0)
print(len(contours))epsilon=0.01*cv2.arcLength(contours[0],True)
approx=cv2.approxPolyDP(contours[0],epsilon,True)
print(contours[0].shape)
print(approx.shape)
phone_new=phone.copy()
image_contours=cv2.drawContours(phone_new,[approx],contourIdx=-1,color=(0,255,0),thickness=3)
cv2.imshow('phone',phone)
cv2.waitKey(0)
cv2.imshow('image_contours',image_contours)
cv2.waitKey(0)

http://www.dtcms.com/wzjs/597314.html

相关文章:

  • 济南网站建设哪里有做证
  • 旅游响应式网站建设新网站怎么做排名
  • 螺蛳粉的软文推广长沙企业关键词优化
  • 做公益网站的原因wordpress使用教程
  • dw网页设计软件的学习网站怎么找网站做公示
  • 无锡网络建站旅游主题网站怎么做
  • 让别人做一个网站需要多少钱网络优化需要哪些知识
  • 成品网站 子目录打不开网上做翻译兼职网站
  • wordpress制作网站教程湛江网站营销
  • 东莞 网站建设收费建设网站注意哪几点
  • 更合公司网站建设个人网站下载
  • 专门做名片的网站机场建设集团网站
  • vue做的项目网站百度app平台
  • 帮别人做违法网站会判刑吗三亚做网站公司
  • 信丰县建设局网站网站与系统对接图文方案
  • 网站开发工具可视化昆明网站的优化
  • 聊城营销网站建设价格东莞三网合一网站制作
  • 网站开发怎么让别人看到做p2p网站费用
  • jsp网站建设模板烟台网站制作公司在线咨询
  • 新学校网站建设成果房产网站cms
  • 奉化建设局网站广州最新通告
  • 重庆市网上房地产官网电脑优化大师有用吗
  • 支付单页网站模板商业设计说明
  • 呼和浩特电子商务网站建设站内优化包括哪些
  • 做盗版视频网站成本多少电子商务的发展现状和前景趋势
  • 做包装找灵感看什么网站友情链接中有个网站域名过期了会影响
  • 自助建设视频网站codepen wordpress
  • 局门户网站的建设方案宣传册样式
  • 有免费做理化试验的网站吗hao123网站难做吗
  • 制作公司网站用阿里云本人找做钢筋笼的活网站