void gettime()
{
struct tm t; //tm结构指针
time_t now; //声明time_t类型变量
time(&now); //获取系统日期和时间
localtime_s(&t, &now); //获取当地日期和时间
//格式化输出本地时间
printf("年:%d\n", t.tm_year + 1900);
printf("月:%d\n", t.tm_mon + 1);
printf("日:%d\n", t.tm_mday);
printf("周:%d\n", t.tm_wday);
printf("一年中:%d\n", t.tm_yday);
printf("时:%d\n", t.tm_hour);
printf("分:%d\n", t.tm_min);
printf("秒:%d\n", t.tm_sec);
printf("夏令时:%d\n", t.tm_isdst);
string time_s = format("%d", t.tm_year + 1900) + "/" + format("%.2d", t.tm_mon + 1) + "/" + format("%.2d", t.tm_mday) + " " +
format("%.2d", t.tm_hour) + ":" + format("%.2d", t.tm_min) + ":" + format("%.2d", t.tm_sec);
cout << "格式:" <
结果如下:
void getMillisecond() {
long startTime = clock();
Sleep(2000);
long endTime = clock();
cout << endTime - startTime << endl;
}
其中inDataPtr->imgInform.dataPtr数据类型是:unsigned char *。下面是先将YUV转成单通道的Mat类型,注意高是原来的1.5倍;最后使用cvtColor将单通道的Mat类型转成BGR格式。
int len = inDataPtr->imgInform.width * inDataPtr->imgInform.height * 3 / 2;
cv::Mat yuvImg;
cv::Mat frame(inDataPtr->imgInform.height, inDataPtr->imgInform.width, CV_8UC3);
yuvImg.create(inDataPtr->imgInform.height * 3 / 2, inDataPtr->imgInform.width, CV_8UC1);
memcpy(yuvImg.data, inDataPtr->imgInform.dataPtr, len);
cv::cvtColor(yuvImg, frame, cv::COLOR_YUV2BGR_I420);
cv::imshow("ret",frame);
cv::waitKey(0);
cv::Mat bgr(inDataPtr->imgInform.height, inDataPtr->imgInform.width, CV_8UC3);
int len = inDataPtr->imgInform.width * inDataPtr->imgInform.height * 3;
memcpy(rgb.data, inDataPtr->imgInform.dataPtr, len);
imshow("bgr", bgr);
waitKey(0);
#include
#include
#include
using namespace std;
using namespace cv;
struct callbackP
{
Mat src;
vector srcTri;
};
void points2Mask(cv::Mat& src, std::vector mask_points) {
std::vector> mask_area;
mask_area.push_back(mask_points);
polylines(src, mask_area, 1, cv::Scalar(0, 0, 0));
fillPoly(src, mask_area, cv::Scalar(255, 255, 255));
}
void onMouse(int event, int x, int y, int flags, void *utsc)
{
callbackP cp = *(callbackP*)utsc; // 先转换类型,再取数据
if (event == EVENT_LBUTTONUP) // 响应鼠标左键事件
{
circle((*(callbackP*)utsc).src, cv::Point(x, y), 2, Scalar(255, 255, 255), 4); //标记选中点
imshow("wait ", (*(callbackP*)utsc).src);
(*(callbackP*)utsc).srcTri.push_back(cv::Point(x, y));
cout << "x:" << x << " " << "y:" << y << endl;
}
}
vector getPoints(Mat img) {
callbackP utsc;
utsc.src = img.clone();
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", utsc.src);
setMouseCallback("src", onMouse, (void*)&utsc); //类型转换
waitKey();
destroyAllWindows();
return utsc.srcTri;
}
int main(){
Mat frame = cv::Mat::zeros(480, 640, CV_8UC1);
vector points;
points = getPoints(frame); // 获取点集
points2Mask(frame, points); // 点集转Mask
imshow("mask", frame);
waitKey(0);
destroyAllWindows();
// 判断是否在封闭区域内
points.clear();
points = getPoints(frame);
for(int i=0;i(points[i].y, points[i].x) == 255) { // 在区域内
cout << "True" << endl;
}
else { // 不在区域内
cout << "False" << endl;
}
}
int a;
cin >> a;
}
截图如下: