Opencv实现边缘检测与轮廓发现及绘制轮廓方法详解

Opencv实现边缘检测与轮廓发现及绘制轮廓方法详解

Opencv是一个开源的计算机视觉库,提供了许多图像处理和计算机视觉功能。其中边缘检测和轮廓发现是Opencv中比较常用的图像处理技术。本文将详细讲解如何使用Opencv实现边缘检测和轮廓发现,并利用这些轮廓进行图像分割、目标识别等操作。

边缘检测

边缘是图像中具有纹理、亮度、颜色、深度等特征变化的区域。在计算机视觉中,边缘检测是指通过计算图像中像素点的差异,找到图像中不同区域之间的边界。常用的边缘检测算法有Sobel算子、Laplacian算子和Canny算子。

下面是一个使用Sobel算子进行边缘检测的Python示例:

import cv2

# 读取图像
img = cv2.imread("test.jpg")

# 转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 计算x方向和y方向的梯度
gradX = cv2.Sobel(gray, cv2.CV_32F, 1, 0)
gradY = cv2.Sobel(gray, cv2.CV_32F, 0, 1)

# 取绝对值并转换成8位图像(0~255)
gradX = cv2.convertScaleAbs(gradX)
gradY = cv2.convertScaleAbs(gradY)

# 合并梯度
grad = cv2.addWeighted(gradX, 0.5, gradY, 0.5, 0)

# 显示结果
cv2.imshow("edge", grad)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述示例中,我们先读取了一张测试图像,接着将其转换为灰度图像。然后分别计算了x方向和y方向上的梯度,最后将其合并并显示出来。其中cv2.Sobel()函数用于计算梯度值,cv2.convertScaleAbs()函数用于将梯度值转换为8位图像。

轮廓发现及绘制

轮廓是通过连接边缘上一组连续像素点得到的连续线条。在计算机视觉中,轮廓通常被用于物体检测、目标跟踪、图像分割等领域。Opencv提供了多种轮廓发现算法,包括findContours()函数、approxPolyDP()函数、cv2.convexHull()函数等。

下面是一个使用findContours()函数和drawContours()函数进行轮廓发现和绘制的Python示例:

import cv2

# 读取图像
img = cv2.imread("test.jpg")

# 转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 进行二值化处理
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

# 查找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0,0,255), 2)

# 显示结果
cv2.imshow("contour", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述示例中,我们先读取了一张测试图像,接着将其转换为灰度图像并进行二值化处理。然后使用cv2.findContours()函数查找轮廓。最后使用cv2.drawContours()函数将所有轮廓绘制到原图像上。其中-1表示绘制所有轮廓,(0,0,255)是绘制颜色,2是绘制线条宽度。

结论

本文介绍了Opencv中的边缘检测和轮廓发现两种图像处理技术,并给出了相应的Python示例。通过对这两种技术的掌握,我们可以在图像处理、目标识别、图像分割等领域有所应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Opencv实现边缘检测与轮廓发现及绘制轮廓方法详解 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 完美解决torch.cuda.is_available()一直返回False的玄学方法

    下面我将为你详细讲解如何完美解决torch.cuda.is_available()一直返回False的问题。 问题描述 在使用PyTorch进行深度学习时,我们通常会使用GPU加速训练,其中一个常用的判断是否可用的方法是使用torch.cuda.is_available()。然而,在某些情况下,这个函数会一直返回False,即使我们的机器上已经安装了CUDA…

    人工智能概论 2023年5月25日
    00
  • 了解你的助手 扫描仪基础知识详解

    了解你的助手 扫描仪基础知识详解 什么是扫描仪? 扫描仪是一种可以将纸质文档、照片、绘画等实物转换成数字格式的设备。它通常包括一个扫描头、一个镜头、一个传感器和一台电脑等组件。 扫描头是扫描仪中最重要的组件之一,它通常由数十甚至数百个光电传感器组成,用于转换成数字信号的物理图像。传感器则用来控制扫描头的位置和方向,以确保扫描结果的精确度。 扫描仪可分为两种类…

    人工智能概览 2023年5月25日
    00
  • node-gyp安装vuetify编译失败gyp ERR的问题及解决

    下面是详细的攻略: 问题描述 在安装或使用vuetify组件库时,有时会遇到node-gyp编译vuetify组件失败的问题,报错信息中包含gyp ERR。这种问题常见于Windows环境下,但在其他操作系统中也可能出现。 问题分析 出现这种问题通常是由于缺少一些必要的编译工具或环境变量配置不正确导致的。具体原因需要进一步分析错误日志来确定,通常可以分为以下…

    人工智能概览 2023年5月25日
    00
  • Python实现批量识别银行卡号码以及自动写入Excel表格步骤详解

    Python实现批量识别银行卡号码以及自动写入Excel表格步骤详解 准备工作 在开始编写代码之前,需要安装以下库: requests:用于发送HTTP请求 xlwt、xlrd:用于读写Excel文件 pillow:用于图像处理 安装方式: pip install requests xlrd xlwt pillow 同时,还需要下载 tesseract-oc…

    人工智能概论 2023年5月25日
    00
  • pytorch锁死在dataloader(训练时卡死)

    当PyTorch在使用数据加载器(Dataloader)进行训练时,可能会发生锁死的情况,导致程序无法继续进行。下面是一些可能出现锁死的原因和解决方案: 原因1:数据集中存在损坏的图片 在数据加载时,如果存在损坏的图片,可能会导致程序锁死。可以通过try…except语句来处理异常,并跳过这些损坏的图片。例子如下: from PIL import Ima…

    人工智能概览 2023年5月25日
    00
  • 放弃 Python 转向 Go语言有人给出了 9 大理由

    “放弃 Python 转向 Go 语言有人给出了 9 大理由”的完整攻略 1. 引言 在近年来的编程语言领域中,Go 语言已经逐渐成为了一个备受关注的语言,吸引了许多程序员的关注和学习。而一些程序员也在持续地从其他语言转向 Go 语言,这其中就包括部分 Python 程序员。本文将介绍一些 Python 程序员放弃 Python 前往 Go 语言的原因。 2…

    人工智能概览 2023年5月25日
    00
  • 用Python一键搭建Http服务器的方法

    下面是详细讲解“用Python一键搭建Http服务器的方法”的完整攻略。 目录 背景介绍 使用SimpleHTTPServer模块搭建服务器 使用http.server模块搭建服务器 示例说明 总结 背景介绍 在开发过程中,我们可能需要将一些静态的文件部署到一个Http服务器上,比如图片、CSS、JS等文件。有些时候我们可能并不想通过IIS、Apache等W…

    人工智能概论 2023年5月25日
    00
  • ASP.NET session.timeout设置案例详解

    ASP.NET Session.Timeout 设置案例详解 什么是 ASP.NET Session.Timeout ASP.NET Session.Timeout 是指在一定的时间段内,如果客户端没有向服务器发送任何请求,那么服务器就会自动销毁客户端的会话信息。 如何设置 ASP.NET Session.Timeout 在 ASP.NET 中,我们可以通过…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部