opencv函数制作的时钟模型
http://www.cnblogs.com/sytu/p/4192652.html
在秒针模型的基础上添加了分针和时针,并且添加了暂停控件和设置时间的功能。
#include"cv.h"
#include"highgui.h"
int run = ;
void Stop_Run_onclick(int event,int x,int y,int flags,void* param)
{
switch (event)
{
case CV_EVENT_LBUTTONDOWN:{
if (x< && x> && y< && y>)
{
run = !run;
}
}
default:
break;
}
}
void Drwan_button(IplImage* plane)
{
//画按钮
cvRectangle(plane, cvPoint(, ), cvPoint(, ), cvScalar(, , ), );
cvSetImageROI(plane, cvRect(, , , ));
cvZero(plane);
cvFloodFill(plane,cvPoint(,),cvScalarAll(),cvScalarAll());
cvResetImageROI(plane);
if (run)
cvPutText(plane, "StopTime", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
else
{
cvPutText(plane, "RunTime", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
}
}
double PIZHI(int count)
{
return *(1.0*count / 60.0 * 3.1415926);
}
int main()
{
IplImage* Plane = cvCreateImage(cvSize(,),,);
cvAddS(Plane,cvScalar(,,),Plane);
cvCircle(Plane,cvPoint(,),,cvScalar(,,),);
cvPutText(Plane,"",cvPoint(,),&cvFont(,),cvScalar(,,));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , )); cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvPutText(Plane, "", cvPoint(, ), &cvFont(, ), cvScalar(, , ));
cvCircle(Plane,cvPoint(,),,cvScalarAll(),);
cvNamedWindow("Clock");
cvSetMouseCallback("Clock",Stop_Run_onclick,);
Drwan_button(Plane);
cvShowImage("Clock",Plane);
IplImage* img = cvCreateImage(cvGetSize(Plane),,);
double dangle = 0.1036;
int r = ;
int x = , y = ;//圆心
int count_s = ;
int count_m = ;
int x1, x2;
//for seconds
double angle = ;
int dx = ;
int dy = ;
//for minutes
double angle_m = ;
int mx = ;
int my = ;
//for hours
double angle_h = ;
int hx=, hy = ;
int count_h = ;
//设置时钟输入调节
//angle;
//angle_m;
//angle_h;
//count_m;
//count_s;
printf("\t\t\t选项\n\t\t\t从零点开始走针(1)\n\t\t\t从历史记录的时间走针(2)\n\t\t\t输入选项:");
int judge;
scanf("%d", &judge);
if (judge == ){
FILE *file = fopen("TimeRecord.dat", "r");
fscanf(file, "%lf %lf %lf %d %d %d", &angle_h, &angle_m, &angle, &count_h, &count_m, &count_s);
fclose(file);
}
system("cls");
printf("按下ESC键可以退出!\n");
printf("Enter键或者屏幕按键可以暂停钟表转动\n");
printf("按下空格键可以设置时间:(输入格式为00:00:00)\n"); while (true)
{
if (run){
cvCopy(Plane, img);
dy = r * cos(angle);
dx = r * sin(angle);
//for seconds
my = r * cos(angle_m);
mx = r * sin(angle_m);
//for hours
hx = r * sin(angle_h);
hy = r * cos(angle_h);
count_s++;
angle=PIZHI(count_s);
cvLine(img, cvPoint(x, y), cvPoint(x + hx / , x - hy / ), cvScalar(, , ), );
cvLine(img, cvPoint(x, y), cvPoint(x + mx / 1.5, y - my / 1.5), cvScalar(, , ), );
cvLine(img, cvPoint(x, y), cvPoint(x + dx, y - dy), cvScalar(, , ), ); if (count_s == ||judge==)
{
if (judge!=)
count_s = ;
count_m++;
angle = ;
angle_m=PIZHI(count_m);
if (count_m % == ||judge==){
count_h++;
angle_h = PIZHI(count_h);
if (count_h == )count_h = ;
}
if (count_m == )count_m = ;
judge = ;
}
}
Drwan_button(img);
cvShowImage("Clock", img); char ch = cvWaitKey();
if (ch == )
{
FILE* write = fopen("TimeRecord.dat","w");
fprintf(write, "%lf %lf %lf %d %d %d", angle_h, angle_m, angle, count_h, count_m, count_s);
fclose(write);
break;
}
else if (ch==)
{
run = !run;
}
else if (ch == )
{
scanf("%d:%d:%d",&count_h,&count_m,&count_s);
count_h=count_h * + 1.0*count_m / 12.0;
judge = ;
}
}
cvWaitKey();
return ;
}
做着挺好玩的,就当练练手吧。
opencv函数制作的时钟模型的更多相关文章
- opencv函数制作的秒针模型
曾经做过,没想到这次再次写这篇代码却用了这么久的时间.这回我要记住他. #include"cv.h" #include"highgui.h" int main( ...
- 使用jQuery和CSS3制作数字时钟(jQuery篇) 附源码下载
HTML 和上一篇文章:使用jQuery和CSS3制作数字时钟(CSS3篇)一样的HTML结构,只是多了个>date用来展示日期和星期的. <div id="clock" ...
- csharp通过dll调用opencv函数,图片作为参数
[blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数 一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找 ...
- matlab调用opencv函数的配置
环境: VS2010 活动解决方案平台x64 WIN 8.1 Opencv 2.4.3 Matlab 2012a 1. 首先保证vs2010能正确调用opencv函数, 2. Matlab中选择编 ...
- [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- OpenCv函数学习(一)
Intel Image Processing Library (IPL) typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; ...
- 一些常用的opencv函数
分配图像空间: IplImage* cvCreateImage(CvSize size, int depth, int channels); size: cvSize(width,hei ...
- Excel中用REPT函数制作图表
本文从以下七个方面,阐述在Excel中用REPT函数制作图表: 一. 图形效果展示 二. REPT语法解释 三. REPT制作条形图 四. REPT制作漏斗图 五. REPT制作蝴蝶图 六. REPT ...
- 常用的OpenCV函数速查
常用的OpenCV函数速查 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4 ...
随机推荐
- shell基础 -- 基本正则表达式
正则表达式(Regular Expression,通常简称为 regex 或 RE)是一种表达方式,可以用它来查找匹配特定准则的文本.在许多编程语言中都有用到正则表达式,常用它来实现一些复杂的匹配.这 ...
- PSP Daily软件Alpha版本——基于NABCD评论,及改进建议
1.根据(不限于)NABCD评论作品的选题: 此软件的用户人群较为明确,即:用户(软件工程课上学生)记录例行报告.写每周PSP表格和统计的需求.潜在用户还有未来该课堂的学生和需要用PSP方法记录任务完 ...
- "群英队"电梯演讲
视频如下: https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vi ...
- Android连接SQLServer详细教程(数据库+服务器+客户端)
摘星 标签: android连接sql http://blog.csdn.net/haoxingfeng/article/details/9111105
- 关于mysql无法添加中文数据的问题以及解决方案
今天弄了一天的mysql数据库,就是被一个mysql数据库乱码的问题给缠住了.现在记录一下这个问题,虽然这个问题不是什么太大的事情,但还是记录一下. 问题是这样的: 1.先在mysql的安装文件当中, ...
- Dijkstra+优先队列 模板
#include<bits/stdc++.h> using namespace std; #define ll long long ; const ll inf=1e17; struct ...
- lintcode-384-最长无重复字符的子串
384-最长无重复字符的子串 给定一个字符串,请找出其中无重复字符的最长子字符串. 样例 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc" ...
- Windows上安装、配置MySQL的常见问题
一,MySQL的下载安装 MySQL的安装过程就不说了,基本上和一般软件的安装过程没什么两样,就是一路点next,设置的root用户的密码要牢记.具体教程可以参考:http://jingyan.bai ...
- 第14章 Linux账号管理与ACL权限设置
Linux的账号与用户组 用户标识符:UID与GID 每一个文件都有一个所有者ID和用户组ID,当我们需要查看文件属性时,系统会根据/etc/passwd和/etc/group的内容,找到对应UID和 ...
- java一些知识
类名前只有两种修饰符:不写(即default,但不能把default写上去)或public.默认不写则此类只能被同一包下的类调用以生成相应的实例.但若是public,则可以被不同包下的类调用以生成其实 ...