资源简介
Snake的轮廓线模型继承了上层知识,而轮廓线与目标轮廓的匹配又结合了底层特征。Snake模型与先检测边缘点再将它们连接成边缘的方法不同,轮廓的连通性及角点均影响能量泛函。因此,Snake模型可以通过优化能量泛函得到一个局部最优的轮廓曲线。
代码片段和文件信息
#include “stdafx.h“
#include “cv.h“
#include “highgui.h“
#include
#include
#include
#include
#pragma comment(lib“highgui.lib“)
#pragma comment(lib“cv.lib“)
#pragma comment(lib“cvaux.lib“)
#pragma comment(lib“cxcore.lib“)
std::vector InitContour;
//用于显示的图像
IplImage* temp; //= cvCreateImage(cvGetSize(img) IPL_DEPTH_8U 1);
void showContent(IplImage * img)
{
if(temp==NULL)
temp= cvCreateImage(cvGetSize(img) IPL_DEPTH_8U 1);
cvCopyImage(imgtemp);
//在原始图像上划线
for (int i=0;i {
cvCircle(temp InitContour[i] 2 cvScalarAll(155));
int j = (i+1)%InitContour.size();
cvLine( temp InitContour[i]InitContour[j] cvScalarAll(100) 1);
}
cvSaveImage(“sef.jpg“temp);
cvShowImage( “srcImage“ temp );
}
double wcvDistance(CvPoint &pt1CvPoint &pt2)
{
double distance = sqrt(pow((double)(pt1.x - pt2.x)2)+pow((double)(pt1.y - pt2.y)2));
return distance;
}
void CaculateDiff(std::vector &srcstd::vector &diff)
{
int size = src.size();
diff.clear();
diff.reserve(size);
diff.resize(size0.0);
for(int i=0;i {
int j = (i+1)%size;
diff[i] = wcvDistance(src[i]src[j]);
}
}
void removeNearPoints(std::vector &srcstd::vector &dstdouble max_length)
{
std::vector result;
result.clear();
std::vector temp;
temp.clear();
temp = src;
std::vector diff ;
int removed = 1;
while(removed!=0)
{
// diff.clear();
result.clear();
removed = 0;
CaculateDiff(tempdiff);
int srcsize = temp.size();
for(int i=0;i {
if(diff[i] {
removed++;
continue;
}
result.push_back(temp[i]);
}
temp.clear();
temp = result;
}
dst.clear();
dst = result;
return ;
}
void contourInterpolation(std::vector &srcstd::vector &dst)
{
std::vector temp;
std::vector diff ;
CaculateDiff(srcdiff);
}
void on_mouse( int event int x int y int flags void* ptr)
{
if( event == CV_EVENT_LBUTTONDOWN )
{
InitContour.push_back(cvPoint(xy));
showContent((IplImage *)ptr);
}
}
//对所有轮廓点进行插值
void ReGeneralPtArrs(std::vector &srcstd::vector &dst)
{
std::vector temp = src;
std::vector diff ;
for(int k=0;k<10;k++)
{
int size = temp.size();
CaculateDiff(tempdiff);
std::vector na;
for (int i=0;i {
if(diff[i]<0.5)
continue;
na.push_back(temp[i]);
if(diff[i]>=1.8)
{
int next = (i+1)%size;
CvPoint ne = temp[next];
CvPoint mid = cvPoint((temp[i].x+ne.x)/2(temp[i].y+ne.y)/2);
na.push_back(mid);
}
}
temp.clear();
temp = na;
}
dst = temp;
}
int _tmain(int argc _TCHAR* argv[])
{
IplImage * srcimage = NULL;
if ( argc == 2 &&
(srcimage =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-10-31 10:02 snake_C++\
目录 0 2013-10-31 09:13 snake_C++\Debug\
文件 1442816 2013-10-31 09:13 snake_C++\Debug\Snake_plus.bsc
文件 307287 2013-10-31 09:13 snake_C++\Debug\Snake_plus.exe
文件 436112 2013-10-31 09:13 snake_C++\Debug\Snake_plus.ilk
文件 104481 2013-10-31 09:13 snake_C++\Debug\Snake_plus.obj
文件 5194996 2013-10-31 09:02 snake_C++\Debug\Snake_plus.pch
文件 640000 2013-10-31 09:13 snake_C++\Debug\Snake_plus.pdb
文件 0 2013-10-31 09:13 snake_C++\Debug\Snake_plus.sbr
文件 148480 2013-10-31 09:21 snake_C++\Debug\vc60.idb
文件 159744 2013-10-31 09:13 snake_C++\Debug\vc60.pdb
文件 4880 2013-10-31 09:13 snake_C++\Snake_plus.cpp
文件 3453 2013-10-31 10:02 snake_C++\Snake_plus.dsp
文件 545 2013-10-30 17:37 snake_C++\Snake_plus.dsw
文件 41984 2013-10-31 10:02 snake_C++\Snake_plus.ncb
文件 48640 2013-10-31 10:02 snake_C++\Snake_plus.opt
文件 916 2013-10-31 09:13 snake_C++\Snake_plus.plg
文件 4514 2013-10-30 17:23 snake_C++\Snake_plus.vcproj
文件 1419 2013-10-30 17:23 snake_C++\Snake_plus.vcproj.WENYAOGUANG.Administrator.user
文件 5490 2013-10-30 17:23 snake_C++\Snake_plus.vcxproj
文件 1227 2013-10-30 17:23 snake_C++\Snake_plus.vcxproj.filters
文件 143 2013-10-30 17:23 snake_C++\Snake_plus.vcxproj.user
文件 20758 2007-01-01 21:29 snake_C++\gvfsnake5_31.BMP
文件 11559 2013-10-31 09:22 snake_C++\sef.jpg
文件 297 2013-10-30 17:23 snake_C++\stdafx.cpp
文件 376 2013-10-30 17:23 snake_C++\stdafx.h
- 上一篇:K短路(双扫描法)C++
- 下一篇:VS2005版MFC备忘录
相关资源
- K短路(双扫描法)C++
- [推荐源码]C++飞鸽传书服务器客户端源
- VC++雷达模拟程序
- C++进阶课程讲义 传智播客
- C++ GUI Programming with Qt 4
- c++课设仓库物流管理系统
- Accelerated C++ 英文 CHM转PDF 非扫描版
- 北大青鸟c++基础教程ppt
- Getting Started with C++ Audio Programming for
- C++游戏基本框架,实现双缓冲功能!
- 黑马C++讲义
- 数据结构算法设计C++,乐学答案
- 图书管理系统C++版202685
- 校招C&C++笔试题大全
- 吃豆人C/c++实现
- [文字版]C+++Templates简体中文版
- C++大学教程习题答案
- 数据结构与算法分析C++版 Clifford A.
- 用VC++编写的利用MITK读取五种图片格式
- Visual C++利用OpenCV对图像进行人脸识别
- C++基础与提高-王桂林-4rd.pdf
- VC++ socket 聊天室客户端
- 易学C++教程PDF版
- 支持向量机中smo算法c++实现
- 一个chord算法的c++实现
- 杂凑算法SM3的C++实现
- C++写的贪吃蛇(含源代码和注释,采
- mfc树形控件201037
- c++ Include头文件资源包
- 江苏省二级计算机等级考试c++模拟软
评论
共有 条评论