OpenCv之图像轮廓(二)

这篇具有很好参考价值的文章主要介绍了OpenCv之图像轮廓(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、多边形逼近

二、凸包

 三、最小外接矩形与最大外接矩形


一、多边形逼近

参照函数:

OpenCv之图像轮廓(二),Opencv,opencv,人工智能,计算机视觉

approxPolyDP就是以多边形去逼近轮廓,采用的是Douglas-Peucker算法(DP)

DP算法原理比较简单,核心就是不断找多边形最远的点加入形成新的多边形,直到最短距离小于指定的精度。

案例代码如下:

import cv2
import numpy as np

# 该图像显示效果是黑白的,但是实际上确实三个通道的彩色图像
img = cv2.imread('6.jpg')

# 变成单通道的黑白图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 二值化,注意有两个返回值,阈值和结果
ret,binary = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

# 轮廓查找,新版本返回两个结果,轮廓和层级,老版本返回三个 参数,图像,轮廓和层级
result,contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓会直接修改原图
# 如果想保持原图不变,建议copy一份
img_copy = img.copy()
cv2.drawContours(img_copy,contours,0,(0,0,255),2)

# 使用多边形逼近,近似模拟手的轮廓
approx = cv2.approxPolyDP(contours[0],5,closed=True)
# 画出多边形逼近的轮廓
cv2.drawContours(img_copy,[approx],0,(0,0,255),2)


# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

OpenCv之图像轮廓(二),Opencv,opencv,人工智能,计算机视觉

二、凸包

逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。凸包跟逼近多边形很像,只不过它是物体最外层的凸多边形。凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点的直线都在凸包的内部。在凸包内,任意连续三个点的内角小于180°。

案例代码如下:

import cv2
import numpy as np

img = cv2.imread('6.jpg')

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 二值化
thersh,binary = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

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

# 绘制轮廓(0代表一个轮廓)
cv2.drawContours(img,contours,0,(0,0,255),2)

# 多边形逼近
approx = cv2.approxPolyDP(contours[0],20,closed=True)
# 画出轮廓
cv2.drawContours(img,[approx],0,(0,0,255),2)

# 凸包
hull = cv2.convexHull(contours[0])
# 画出凸包
cv2.drawContours(img,[hull],0,(255,0,0),2)

cv2.imshow('img',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

OpenCv之图像轮廓(二),Opencv,opencv,人工智能,计算机视觉

 三、最小外接矩形与最大外接矩形

外接矩形分为最小外接矩形与最大外接矩形

OpenCv之图像轮廓(二),Opencv,opencv,人工智能,计算机视觉

 案例代码如下:

import cv2
import numpy as np

# 该图像显示效果是黑白的,但是实际上确实三个通道的彩色图像
img = cv2.imread('6.jpg')

# 变成单通道的黑白图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 二值化,注意有两个返回值,阈值和结果
ret,binary = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

# 轮廓查找,新版本返回两个结果,轮廓和层级,老版本返回三个 参数,图像,轮廓和层级
result,contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# rect是一个旋转的矩形,矩形的其实坐标(x,y),矩形的长宽,矩形旋转角度
# 画最小外接矩形
rect = cv2.minAreaRect(contours[1])
# 坐标必须为整数,需要转换一下
box = cv2.boxPoints(rect)
box = np.int0(box)
# 或者四舍五入一下
box = np.round(box).astype('int64')
cv2.drawContours(img,[box],0,(255,0,0),2)


# 最大外接矩形,返回最大外接矩形的参数,(x,y),(w,h)
x,y,w,h = cv2.boundingRect(contours[1])
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)




运行结果如下:

OpenCv之图像轮廓(二),Opencv,opencv,人工智能,计算机视觉

 文章来源地址https://www.toymoban.com/news/detail-585089.html

到了这里,关于OpenCv之图像轮廓(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 7.OpenCV-图像轮廓

    1.通过OpenCV的findContours可以很方便的找到图片中内容的轮廓。 2.为了提取轮廓有更高的准确率,在提取轮廓前,需要对图片进行预处理(二值+阈值),只保留感兴趣的图像。 3.通过计算轮廓面积与外接矩形或外接圆的面积,可以找到轮廓特征,进一步筛选出感兴趣的轮廓。

    2024年02月09日
    浏览(65)
  • OpenCV 图像轮廓检测

            本文是OpenCV图像视觉入门之路的第15篇文章,本文详细的介绍了图像轮廓检测的各种操作,例如:轮廓检索模式、轮廓逼近算子等操作。         图像轮廓是具有相同颜色或灰度的连续点的曲线,轮廓在形状分析和物体的检测和识别中很有用。图像轮廓的作用

    2024年01月25日
    浏览(50)
  • opencv图像轮廓检测

    效果展示: 代码部分:

    2024年02月12日
    浏览(53)
  • OpenCv之图像轮廓

    目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析 物体的识别与检测 注意点: 为了检测的准确性,需要先对图像进行二值化或Canny操作 画

    2024年02月17日
    浏览(49)
  • OpenCV 10(图像轮廓)

    图像轮廓是具有相同颜色或灰度的连续点的曲线. 轮廓在形状分析和物体的检测和识别中很有用。 轮廓的作用: - 用于图形分析 - 物体的识别和检测 注意点: - 为了检测的准确性,需要先对图像进行** 二值化**或**Canny操作 **。 - 画轮廓时会修改输入的图像, 如果之后想继续使用

    2024年02月09日
    浏览(53)
  • OpenCV图像处理——轮廓检测

    2024年02月13日
    浏览(49)
  • 【OpenCV】第十二章: 图像轮廓

    第十二章: 图像轮廓 图像边缘和图像轮廓的区别 前面我们在图像形态学操作里,用cv2.morphologyEx()这个函数实现图像梯度的提取,就是用膨胀图像-腐蚀图像,获取一个图像中前景图像的边缘。还有我们的礼帽黑帽一定程度也能提取图像的边缘信息。 我们还在图像梯度里面详细

    2024年02月04日
    浏览(61)
  • c# opencv 找到图像的轮廓,并绘制轮廓

    原图                                                                                结果图                                                                  本意是想去除白色图像周边的几个白色小点,得到轮廓图后,其他都设置为黑色,结果是白点更明

    2024年02月13日
    浏览(89)
  • opencv通过轮廓点生成闭合图像

    有时候需要将某一些点生成闭合的二值图像。记录一下。

    2024年01月17日
    浏览(33)
  • 【Python】OpenCV-图像轮廓检测初学

    在图像处理领域中,轮廓检测是一项重要的任务,用于寻找并标定图像中的物体边缘。本文将介绍如何使用OpenCV库进行图像轮廓检测,并展示一个简单的示例代码。代码中的注释将详细解释每一步的操作。 图像轮廓检测是图像处理中的一项关键技术,可用于检测物体的形状、

    2024年02月21日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包