OpenCV轮廓查找(一)

本文介绍了OpenCV中的轮廓检测,包括cvFindContours()和cvDrawContours()函数的使用。通过一个示例程序展示了轮廓检测的完整流程,从RGB图像转灰度图,再到二值图像,接着检测和绘制轮廓。文章还详细解释了轮廓检测模式(如CV_RETR_EXTERNAL和CV_RETR_TREE)以及轮廓近似方法(如CV_CHAIN_APPROX_SIMPLE)。最后,提到了内存存储器CvMemStorage和序列CvSeq在轮廓检测中的作用。

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

虽然Canny之类的边缘检测算法可以根据像素间的差异检测出轮廓边界的像素,但是它并没有将轮廓作为一个整体。下一步是要把这些边缘像素组装成轮廓。而对于这一步的实现,OpenCV自带了函数cvFindContours()和cvDrawContours(),这两个函数主要的作用就是检测轮廓,并把检测到的轮廓画出来。
下面先给出个完整的轮廓检测示例,然后我们再结合这个程序示例,解释相关的函数。

#include<opencv2/opencv.hpp>
using namespace std;

IplImage *g_pGrayImage = NULL;
const char *windows1 = "二值图";
const char *windows2 = "轮廓图";

CvSeq *g_pcvSeq = NULL;

//进度条回调函数
void on_trackbar(int pos)
{
    IplImage *pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 1);
    cvThreshold(g_pGrayImage, pBinaryImage, pos, 255, CV_THRESH_BINARY);//转化为二值化图像

    cvShowImage(windows1, pBinaryImage);//显示二值化图像

    CvMemStorage *cvMStorage = cvCreateMemStorage();//创建内存存储器
    cvFindContours(pBinaryImage, cvMStorage, &g_pcvSeq);//检测轮廓并返回检测到的轮廓的个数

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值