opencv笔记6----轮廓检测

本文介绍了一种适用于不规则形状表面粗糙工件轮廓检测的图像处理方法,包括平滑灰度化、Canny边缘检测、闭运算连接缺口、内部填充及轮廓检测等步骤。避免了传统二值化方法的局限,直接使用Canny算子检测边缘图形效果更佳。闭运算函数用于平滑边缘,提高检测精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

轮廓检测是个很麻烦的事情,需要排除各种环境因素,难以有普遍适用的标准,本程序也只是在不规则形状表面粗糙的工件轮廓检测中寻找到的较为适合的方法

首先进行平滑灰度化、然后进行Canny边缘检测、进行闭运算连接缺口平滑边缘、对内部填充、检测轮廓(去掉小轮廓)

网上找到的一些程序在findContours之前对图像进行二值化,感觉效果不佳,且需要反复调节阈值

直接进行Canny检测边缘图形效果更好

闭运算函数morphologyEx是图形学处理函数,可以有效平滑边缘

//轮廓提取
	//invertColor(quad);//反色
	blur(quad,quad,Size(3,3));//平滑
	cvtColor(quad,gray,CV_RGB2GRAY);//灰度
	imshow("gray",gray);
	cv::Mat resultGray;  

	imshow("enhanced",gray);
	//threshold(gray,bin,125, 255, CV_THRESH_BINARY);//二值化?
	//canny sobel laplace算子检测边缘
	 Canny(gray,bin,20,100);
	imshow("canny",bin);

	//闭运算
	 Mat element3(3,3,CV_8U,Scalar(1)); 
	 Mat element5(5,5,CV_8U,Scalar(1));
	 Mat element7(7,7,CV_8U,Scalar(1));
	morphologyEx(bin,bin,cv::MORPH_CLOSE,element5);  
	//填充  function:<imfill> in matlab
	vector<vector<Point>> outline;  
	 
	findContours(bin, outline,CV_RETR_LIST , CV_CHAIN_APPROX_NONE);
 
	drawContours(bin, outline,
							-1,//draw all contours
							CV_RGB(255,255,255),
							CV_FILLED,
							1);  //with a thickness of 2 
	imshow("temp",bin);
	//查找轮廓
	morphologyEx(bin,bin,cv::MORPH_CLOSE,element7);  
	outline.clear();
	findContours(bin, outline,CV_RETR_EXTERNAL , CV_CHAIN_APPROX_NONE);  
	deleteShortContours(outline,100,9999);
 
	finalcontours = Mat::zeros(quad.rows,quad.cols,CV_8UC3);
	drawContours(finalcontours, outline,
							-1,//draw all contours
							CV_RGB(255,255,255),
							1);  //with a thickness of 2 


### OpenCV-Python 学习资源概述 OpenCV 是一种广泛应用于计算机视觉领域的开源库,支持多种编程语言,其中 Python 接口因其易用性和高效性而备受青睐。以下是关于 OpenCV-Python 的学习笔记和教程的相关内容。 #### 什么是 OpenCVOpenCV(Open Source Computer Vision Library)是一种跨平台的开源计算机视觉库[^1]。它提供了丰富的功能来处理图像和视频数据,适用于各种应用场景,如物体检测、人脸识别、运动跟踪等。由于其高性能和稳定性,OpenCV 成为了工业界和学术界的首选工具之一。 #### 基础操作示例 以下是一个简单的代码示例,展示如何读取图像并显示: ```python import cv2 # 读取图像 img = cv2.imread('example.jpg') # 显示图像 cv2.imshow('Image', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此代码片段展示了如何加载一张图片并通过窗口显示出来[^2]。 #### 高级功能:灰度变换与直方图均衡化 在图像处理中,灰度变换和直方图均衡化是非常重要的技术。通过调整像素分布可以增强图像对比度,从而改善视觉效果或提高后续算法的表现。 计算直方图的方法如下所示: ```python hist = cv2.calcHist([image], [channel], mask, histSize, ranges) ``` 这里 `calcHist` 函数接受多个参数定义了具体的操作条件[^3]。 #### 轮廓分析与几何形状提取 轮廓分析是识别对象边界的重要手段。下面的例子演示了如何查找最小包围圆: ```python (x, y), radius = cv2.minEnclosingCircle(contour) center = (int(x), int(y)) radius = int(radius) cv2.circle(image, center, radius, color, thickness=2) ``` 上述脚本利用 `minEnclosingCircle()` 方法获取给定轮廓的最佳拟合圆形,并将其绘制到原图上[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值