Opencv 调用摄像头显示视频并添加时间戳水印

#include <opencv.hpp>
#include <Windows.h>
//#include <time.h>

#include "atlstr.h"

using namespace cv;
using namespace std;

void OutputDebugPrintf(const char* strOutputString, ...)
{
	char strBuffer[4096] = { 0 };
	va_list vlArgs;
	va_start(vlArgs, strOutputString);

	_vsnprintf_s(strBuffer, sizeof(strBuffer)-1, strOutputString, vlArgs);
	va_end(vlArgs);
	OutputDebugString(CA2W(strBuffer));
}


int main(int argc, char* argv[])
{
	VideoCapture cap(0); // open the default camera
	if (!cap.isOpened())  // check if we succeeded
		return -1;
	double w = cap.get(CV_CAP_PROP_FRAME_WIDTH);
	double h = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
	double count = cap.get(CV_CAP_PROP_FPS);
	Mat edges;
	namedWindow("edges", CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED);
	cv::Point p = cv::Point(300, 20);

	struct tm t;   //tm结构指针
	time_t now;  //声明time_t类型变量

	char ch[64];
	
	clock_t tick1, tick2;
	tick1 = clock();
	double dt;
	
	for (;;)
	{
		Mat frame;
		cap >> frame; // get a new frame from camera
		/*cvtColor(frame, edges, COLOR_BGR2GRAY);
		GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
		Canny(edges, edges, 0, 30, 3);
		imshow("edges", edges);*/
		//加上字符的起始点
		time(&now);      //获取系统日期和时间
		localtime_s(&t, &now);//获取当地日期和时间
		int len = strftime(ch, sizeof(ch), "%Y-%m-%d %H:%M:%S", &t); //年-月-日 时-分-秒
		ch[len] = '\0';
		putText(frame, ch, p, FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 200, 200), 1, CV_AA);
		tick2 = tick1;
		tick1 = clock(); //ms
		dt = (double)(tick1 - tick2);
		OutputDebugPrintf("dt = %lf ms\n", dt);

		imshow("edges", frame);
		if (waitKey(30) >= 0) break;
	}
	// the camera will be deinitialized automatically in VideoCapture destructor
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zzqgtt/article/details/81208566