原文链接
/**************提取模式.
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提供了更为高级和优化的轮廓检测与跟踪功能,这些库封装了多种算法,可以更方便地应用于各种图像处理任务中。
5. 显示结果:在MFC的视图或对话框中显示处理后的图像,这可以通过重绘函数OnDraw实现。 由于提供的程序可能不完整,你可能需要补充缺失的部分,比如图像读取、显示功能,以及Sobel边缘检测的具体实现。同时,需要...
同时,"可保存多边形坐标"表明程序会输出图形边界点的坐标,这些数据对于后续的数学计算、几何分析或者图形重绘等操作至关重要。 标签“polygon fit”进一步确认了主要的技术焦点在于多边形拟合。多边形拟合的方法...
2. **重绘与缩放**: 轨迹信息被用来在新的尺寸下重新绘制字体。这可能包括调整像素点的位置,以适应新的比例,同时保持字符的形状和细节。在放大过程中,可能会采用抗锯齿技术来提高视觉质量。 3. **输出与保存**: ...
本文将深入探讨与3d-photo-inpainting相关的训练模型,以及其背后的原理和应用。 首先,我们来看看标题提到的"3d-photo-inpainting的训练模型"。训练模型是深度学习的核心,是通过大量数据进行迭代优化得到的数学...
- 在Canvas中,每个粒子可以被表示为一个对象,包含位置、速度、颜色、大小等属性,通过定时器更新其状态并重绘。 - 粒子碰撞检测和行为模拟,如引力、摩擦力等,可以通过物理公式实现。 3. **文字处理** - ...
7. **性能优化**:由于Canvas的频繁重绘可能会对性能造成影响,所以要注意避免不必要的重绘。可以使用`clearRect()`清除指定区域,而不是整个画布,或者使用对象池管理已创建的泡泡,减少内存分配和垃圾回收。 总之...
- **减少不必要的重绘**:确保只有在鲤鱼状态改变时才触发重绘。 - **硬件加速**:开启硬件加速,让GPU处理图形渲染,提高性能。 5. **与布局集成**: 将自定义Drawable放入ImageView或者自定义View中,通过设置...
`DrawSe.java`的重绘功能可能通过覆盖`paintComponent()`方法来实现,确保每次界面更新时都能正确绘制图形。 以上是Java课程设计报告的核心内容,展示了如何使用Java GUI技术和图形处理知识来实现一个简单的图形...
这些粒子通常具有位置、速度、大小、颜色等属性,它们会在每次重绘时根据这些属性进行移动。为了实现液态效果,粒子之间可能需要有一定的相互作用,例如碰撞检测和粘性。此外,粒子可能还需要响应用户的鼠标或触摸...
- **局部重绘**:避免每次更新都清除整个画布,只重绘变动的部分可以提高性能。 - **缓存策略**:对于不经常改变的图形,可以将其保存为图片对象,以减少绘图操作。 总的来说,“canvas端午节小游戏”是Canvas...
Canvas的渲染性能会受到绘制的复杂性和频率的影响,因此开发者可能会使用对象池、批次渲染等技术来减少重绘次数,提高性能。同时,为了适应不同设备的性能差异,可能还需要进行性能检测和调整。 总的来说,这个...
范例10-5-2寻找轮廓并且绘出外框椭圆形 352 范例10-5-3寻找轮廓并且绘出外框三角形 354 范例10-6-1判断某点是否在凸边形的轮廓内 356 范例10-7-1计算轮廓的面积与周长 357 范例10-8-1使用匹配模板找出某物 359 范例...
- 只重绘必要的部分:使用Canvas的`clearRect()`方法清除需要更新的区域,避免全画布重绘,提高性能。 - 减少DOM操作:尽可能在Canvas内部完成图形操作,减少对DOM的操作,因为DOM操作通常比Canvas慢。 通过以上...
5. **重绘与更新**: 清除旧的球和球拍位置,再在新的位置上绘制它们。重复这个过程,形成连续的动画效果。 6. **碰撞检测**: 检测乒乓球与屏幕边缘、球拍之间的碰撞,根据碰撞规则调整其运动轨迹。 通过这个游戏,...
8. **图形动画**:通过定时器和重绘机制实现动态图形,如帧动画或者粒子系统。 9. **图像识别与特征提取**:可能包含简单的边缘检测、轮廓识别或色彩分割等基础图像处理技术。 10. **OpenCV库的集成**:如果实例更...