图像轮廓(二)【OpenCV&Python】

本文详细介绍了使用OpenCV和Python进行图像轮廓处理的各种方法,包括矩形包围框、最小面积矩形、最小包围圆形、最优拟合椭圆、最优拟合直线和逼近多边形的计算和绘制,特别提到了Douglas-Peucker算法在逼近多边形中的应用。
摘要由CSDN通过智能技术生成


🍔小小搬运工,一边搬运一边思考
参考书籍 《OpenCV轻松入门——面向Python李立宗著,电子工业出版社出版

4 轮廓拟合

在计算轮廓时,可能并不需要实际的轮廓,而仅仅需要一个接近轮廓的近似多边形。

4.1 矩形包围框

函数cv2.boundingRect()能够绘制轮廓的矩形边界,该函数的语法格式为:

retval = cv2.boundingRect(array)
# 返回值retval表示返回的矩形边界的左上角顶点的坐标值及矩形边界的宽度和高度。
# 参数array是灰度图像或轮廓。
x,y,w,h = cv2.boundingRect(array)
#x 矩形边界左上角顶点的x坐标
#y 矩形边界左上角顶点的y坐标
#w 矩形边界的x方向的长度
#h 矩形边界的y方向的长度

例11:显示函数cv2.boundingRect()不同形式的返回值。

import cv2
#-----------------------读取并显示原始图像----------------
o1 = cv2.imread("C:\\Users\\Kris\\Desktop\\1.jpg")
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
contour1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#----------------------返回顶点及边长------------------------
x,y,w,h = cv2.boundingRect(contour1[0])
print("顶点及长宽的点形式:")
print ("x=",x)
print ("y=",y)
print ("w=",w)
print ("h=",h)
#---------------------仅有一个返回值的情况-------------------------
rect = cv2.boundingRect(contour1[0])
print("\n顶点及长宽的元组(tuple)形式:")
print("rect=",rect)

运行程序,显示如下结果。
在这里插入图片描述
例12:使用函数cv2.drawContours()绘制矩形包围框。

import cv2
import numpy as np
#-----------------------读取并显示原始图像----------------
o1 = cv2.imread("C:\\Users\\Kris\\Desktop\\1.jpg")
#----------------------提取图像轮廓---------------------
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
contour1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#--------------------------构造矩形边界----------------------------
x,y,w,h = cv2.boundingRect(contour1[0])
brcnt = np.array([[[x,y],[x+w,y],[x+w,y+h],[x,y+h]]])
cv2.drawContours(o1,[brcnt],-1,(255,255,255),2)
#---------------------显示矩形边界----------------------------
cv2.imshow("result",o1)
cv2.waitKey()
cv2.destroyAllWindows()

运行程序,结果显示如下。
在这里插入图片描述
例12:使用函数cv2.dboundingrect()和函数cv2.rectangle()绘制矩形包围框。

import cv2
import numpy as np
#-----------------------读取并显示原始图像----------------
o1 = cv2.imread("C:\\Users\\Kris\\Desktop\\1.jpg")
#----------------------提取图像轮廓---------------------
gray1 = cv2.cvtColor(o1,cv2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值