描述:
1、获取本地时间,精确到毫秒级
2、将获取的时间在窗口上进行显示,制作一个简易的电子时钟。
输出结果:
代码:
#include <iostream>
#include <ctime>
#include <sys/time.h>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
const int IMG_HEIGHT = 480;//显示图片的高度
const int IMG_WIDTH = 640;//显示图片的宽度
int main( )
{
//设置绘制文本的相关参数
char text[100] = "2021/8/8 23:59:59:999";
int font_face = cv::FONT_HERSHEY_COMPLEX;
double font_scale = 1;
int thickness = 2;
int baseline;
//获取文本框的长宽
cv::Size text_size = cv::getTextSize(text, font_face, font_scale, thickness, &baseline);
//将文本框居中绘制
cv::Point origin;
origin.x = IMG_WIDTH / 2 - text_size.width / 2;
origin.y = IMG_HEIGHT / 2 + text_size.height / 2;
//在窗口上循环显示时间,每1ms刷新一次
while(1)
{
cv::Mat image(IMG_HEIGHT,IMG_WIDTH, CV_8UC3,Scalar(230,230,250));//创建一个显示图片
char k=cv::waitKey( 20 );
if(k==27)//在显示窗口按下ESC退出程序
break;
//获得本地时间 年-月-日-时-分-秒
time_t now=time(0);
tm *ltm = localtime(&now);
//获的毫秒
struct timeval tv;
gettimeofday(&tv,NULL);
//将时间写入字符串
char realTime[100];
sprintf(realTime,"%d/%d/%d %d:%d:%d:%d",1900+ltm->tm_year,1+ltm->tm_mon,ltm->tm_mday,(ltm->tm_hour) % 24,ltm->tm_min,ltm->tm_sec,tv.tv_usec/1000);
//将时间画在显示窗口上
cv::putText(image, realTime, origin, font_face, font_scale, cv::Scalar(0,0,0), thickness, 8, 0);
//显示绘制解果
cv::namedWindow("Show Time",0);
cv::imshow("Show Time", image);
cv::waitKey(1);//每1ms自动刷新一次
}
return 0;
}