【OpenCV学习】轮廓检测与重绘

简介: 作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ /**************提取模式. CV_RETR_EXTERNAL - 只提取最外层的轮廓 CV_RETR_LIST - 提取所有轮廓,并且放置在 list 中 CV_RETR_CCOMP - 提取所有轮廓,并且将其组织为两层的 hierarchy: 顶层为连通域的外围边界,次层为洞的内层边界。

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

/**************提取模式. 
CV_RETR_EXTERNAL - 只提取最外层的轮廓 
CV_RETR_LIST - 提取所有轮廓,并且放置在 list 中 
CV_RETR_CCOMP - 提取所有轮廓,并且将其组织为两层的 hierarchy: 顶层为连通域的外围边界,次层为洞的内层边界。 
CV_RETR_TREE - 提取所有轮廓,并且重构嵌套轮廓的全部 hierarchy method 
*********************************/
#include "highgui.h"
#include "cv.h"
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int i=0;
    int mode=CV_RETR_EXTERNAL;//提取轮廓的模式
    int contours_num=0;//图像中提取轮廓的数目
    CvMemStorage *storage=cvCreateMemStorage(0);//设置轮廓时需要的存储容器
    CvSeq *contour =0;//设置存储提取的序列指针
    IplImage *img=cvLoadImage("lena.jpg",0);
    cvThreshold(img,img,128,255,CV_THRESH_BINARY);//二值化
    IplImage *pContourImg = cvCreateImage(cvGetSize(img),
        IPL_DEPTH_8U,3);
    cvNamedWindow("windows",1);
    cvShowImage("windows",img);//显示二值图
    /*cvFindContours查找物体轮廓*/
    mode=CV_RETR_EXTERNAL;//提取物体最外层轮廓
    contours_num=cvFindContours(img,storage,&contour,
        sizeof(CvContour),mode,CV_CHAIN_APPROX_NONE);
    cout<<"检测出的轮廓数目为:"<<contours_num<<" "<<endl;

    /*逐点将轮廓画出*/
    CvSeqReader reader;//读序列
    int count=0;
    if (contour!=0)
    {
        count=contour->total;
        cout<<count<<endl;
    }

    cvStartReadSeq(contour,&reader,0);
    CvPoint pt1;
    CvScalar color=CV_RGB(255,255,255);
    cvNamedWindow("contour",1);
    cvShowImage("contour",pContourImg);
    for (i=0;i<count;i++)//逐点绘图法
    {
        CV_READ_SEQ_ELEM(pt1,reader);//读出一个点
        cvCircle(pContourImg,pt1,1,color);//画出一个点(就是一个以一个像素大小为半径的圆)
        cvShowImage("contour",pContourImg);
        cvWaitKey(5);
    }
    cvWaitKey(0);

    cvReleaseImage(&img);
    cvReleaseImage(&pContourImg);
    cvReleaseMemStorage(&storage);
    return 0;
}


               作者:gnuhpc
               出处:http://www.cnblogs.com/gnuhpc/
               除非另有声明,本网站采用知识共享“署名 2.5 中国大陆”许可协议授权。


分享到:

目录
相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
106 1
|
2月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
74 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
2月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
88 0
|
5月前
|
机器学习/深度学习 传感器 算法
OpenCV4工业缺陷检测的六种方法
OpenCV4工业缺陷检测的六种方法
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
136 2
|
6月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
102 0
|
5月前
|
计算机视觉 Python
opencv 处理图像去噪的几种方法学习
OpenCV 提供了多种图像去噪的方法,以下是一些常见的去噪技术以及相应的 Python 代码示例: 均值滤波:使用像素邻域的灰度均值代替该像素的值。
70 0
|
6月前
|
监控 安全 计算机视觉
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
|
6月前
|
机器学习/深度学习 算法 数据可视化
基于OpenCV的人脸检测软件(含Python源码+UI界面+图文详解)
基于OpenCV的人脸检测软件(含Python源码+UI界面+图文详解)
|
6月前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
43 0