`
java-mans
  • 浏览: 11711297 次
文章分类
社区版块
存档分类
最新评论

轮廓检测与重绘

 
阅读更多

原文链接

/**************提取模式. 
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;
}


分享到:
评论

相关推荐

    光流算法动作跟踪程序

    本项目包含了一系列与光流算法相关的C语言实现,包括模糊逻辑边缘提取、LK光流算法动作跟踪、特征点运动跟踪、轮廓检测与重绘以及眼部识别算法等关键组件。 1. **模糊逻辑边缘提取**: 模糊逻辑边缘提取是一种利用...

    轮廓跟踪小程序

    标题:“轮廓跟踪小程序” 描述:“这可以很容易在原图像中标记出轮廓,...此外,现代计算机视觉库如OpenCV提供了更为高级和优化的轮廓检测与跟踪功能,这些库封装了多种算法,可以更方便地应用于各种图像处理任务中。

    基于MFC的边缘检测

    5. 显示结果:在MFC的视图或对话框中显示处理后的图像,这可以通过重绘函数OnDraw实现。 由于提供的程序可能不完整,你可能需要补充缺失的部分,比如图像读取、显示功能,以及Sobel边缘检测的具体实现。同时,需要...

    照片图形多边形拟合

    同时,"可保存多边形坐标"表明程序会输出图形边界点的坐标,这些数据对于后续的数学计算、几何分析或者图形重绘等操作至关重要。 标签“polygon fit”进一步确认了主要的技术焦点在于多边形拟合。多边形拟合的方法...

    fontscale-util:通过跟踪和重绘来缩放小位图字体的实用程序

    2. **重绘与缩放**: 轨迹信息被用来在新的尺寸下重新绘制字体。这可能包括调整像素点的位置,以适应新的比例,同时保持字符的形状和细节。在放大过程中,可能会采用抗锯齿技术来提高视觉质量。 3. **输出与保存**: ...

    3d-photo-inpainting的训练模型

    本文将深入探讨与3d-photo-inpainting相关的训练模型,以及其背后的原理和应用。 首先,我们来看看标题提到的"3d-photo-inpainting的训练模型"。训练模型是深度学习的核心,是通过大量数据进行迭代优化得到的数学...

    HTML5 Canvas粒子组合文字特效.zip

    - 在Canvas中,每个粒子可以被表示为一个对象,包含位置、速度、颜色、大小等属性,通过定时器更新其状态并重绘。 - 粒子碰撞检测和行为模拟,如引力、摩擦力等,可以通过物理公式实现。 3. **文字处理** - ...

    HTML5 Canvas实现的彩色肥皂泡浮起动画效果源码.zip

    7. **性能优化**:由于Canvas的频繁重绘可能会对性能造成影响,所以要注意避免不必要的重绘。可以使用`clearRect()`清除指定区域,而不是整个画布,或者使用对象池管理已创建的泡泡,减少内存分配和垃圾回收。 总之...

    自定义Drawable实现灵动的红鲤鱼动画

    - **减少不必要的重绘**:确保只有在鲤鱼状态改变时才触发重绘。 - **硬件加速**:开启硬件加速,让GPU处理图形渲染,提高性能。 5. **与布局集成**: 将自定义Drawable放入ImageView或者自定义View中,通过设置...

    精品资料(2021-2022年收藏)中南大学JAVA课程设计报告.docx

    `DrawSe.java`的重绘功能可能通过覆盖`paintComponent()`方法来实现,确保每次界面更新时都能正确绘制图形。 以上是Java课程设计报告的核心内容,展示了如何使用Java GUI技术和图形处理知识来实现一个简单的图形...

    HTML5 Canvas液态粒子汇聚文字动画特效源码.zip

    这些粒子通常具有位置、速度、大小、颜色等属性,它们会在每次重绘时根据这些属性进行移动。为了实现液态效果,粒子之间可能需要有一定的相互作用,例如碰撞检测和粘性。此外,粒子可能还需要响应用户的鼠标或触摸...

    canvas端午节小游戏

    - **局部重绘**:避免每次更新都清除整个画布,只重绘变动的部分可以提高性能。 - **缓存策略**:对于不经常改变的图形,可以将其保存为图片对象,以减少绘图操作。 总的来说,“canvas端午节小游戏”是Canvas...

    html5 canvas实现的手机糖果粉碎游戏源码.zip

    Canvas的渲染性能会受到绘制的复杂性和频率的影响,因此开发者可能会使用对象池、批次渲染等技术来减少重绘次数,提高性能。同时,为了适应不同设备的性能差异,可能还需要进行性能检测和调整。 总的来说,这个...

    基于opencv3.1库的JAVA源码

    范例10-5-2寻找轮廓并且绘出外框椭圆形 352 范例10-5-3寻找轮廓并且绘出外框三角形 354 范例10-6-1判断某点是否在凸边形的轮廓内 356 范例10-7-1计算轮廓的面积与周长 357 范例10-8-1使用匹配模板找出某物 359 范例...

    canvas 小人过桥游戏

    - 只重绘必要的部分:使用Canvas的`clearRect()`方法清除需要更新的区域,避免全画布重绘,提高性能。 - 减少DOM操作:尽可能在Canvas内部完成图形操作,减少对DOM的操作,因为DOM操作通常比Canvas慢。 通过以上...

    使用GID实现打球游戏

    5. **重绘与更新**: 清除旧的球和球拍位置,再在新的位置上绘制它们。重复这个过程,形成连续的动画效果。 6. **碰撞检测**: 检测乒乓球与屏幕边缘、球拍之间的碰撞,根据碰撞规则调整其运动轨迹。 通过这个游戏,...

    vc图形处理程序、内含有21个实例源码

    8. **图形动画**:通过定时器和重绘机制实现动态图形,如帧动画或者粒子系统。 9. **图像识别与特征提取**:可能包含简单的边缘检测、轮廓识别或色彩分割等基础图像处理技术。 10. **OpenCV库的集成**:如果实例更...

Global site tag (gtag.js) - Google Analytics