OpenCV-py学习笔记(四)—— 轮廓检测


这几天一直在学习特征点检测、角点检测相关的内容,更新的略慢,这篇博文将主要介绍一下图像的轮廓方面的知识和openCV中的相关操作。

轮廓检测

参考资料

0. 什么是轮廓?

所谓轮廓,简单地可以解释为,一些连续的,沿着曲线边界的,点的集合,这些点拥有相同的颜色或者亮度。【In English, Contours can be explained simply as a curve joining all the continuous points (along the boundary), having same color or intensity。】这些轮廓往往在目标检测和目标识别中很有作用。

下面是几个在使用opencv作轮廓检测时需要注意的点:

  • 为了更精确地提取轮廓,请使用二值图。也就是说,在使用轮廓提取函数前,请将源图片运用阈值进行二值化(cv2.threshold())或者采用Canny边缘检测
  • findContours 函数会修改源图片,如果希望在轮廓检测后继续使用源图片,务必提前保存在另一个变量中。
  • 在OpenCV中,轮廓检测视作从黑色背景中提取白色的物体,所以,在结果中,白色表示物体,黑色表示背景。

1. 基本使用

下面是一个轮廓检测的基本使用例子:

def find_contours_of_binary_image():
	im = cv2.imread('rectangle.jpg')
	imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
	ret, thresh = cv2.threshold(imgray, 127, 255, 0)

	image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


	print("一共检测到%d个轮廓" % len(contours))
	for i in range(len(contours)):
		print("第%d个轮廓:" % (i + 1))
		print(contours[i])

	# -1 代表画出所有轮廓
	res = cv2.drawContours(im, contours, -1, (0, 255, 0), thickness=3)
	img_show(res)

提取轮廓的步骤大概会是

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值