#include "Log.h" #include "screen.h" std::string type2str(int type) { std::string r; uchar depth = type & CV_MAT_DEPTH_MASK; uchar chans = 1 + (type >> CV_CN_SHIFT); switch ( depth ) { case CV_8U: r = "8U"; break; case CV_8S: r = "8S"; break; case CV_16U: r = "16U"; break; case CV_16S: r = "16S"; break; case CV_32S: r = "32S"; break; case CV_32F: r = "32F"; break; case CV_64F: r = "64F"; break; default: r = "User"; break; } r += "C"; r += (chans+'0'); return r; } int main(int argc, const char** argv) { Log::init(); Log::setConsoleLogLevel(Log::Level::TRACE); Log::addLogfile("log.txt", Log::Level::TRACE); #if __unix__ Log::setColoredOutput(true); #endif Log::info << "Hello, World!"; // load template cv::Mat tem = cv::imread("imgs/Accept.png", cv::IMREAD_COLOR); // cv::imshow("template", tem); // cv::waitKey(0); ScreenShot screen; cv::Mat img; screen(img); // cv::imshow("img", img); // cv::waitKey(0); Log::info << "img " << img.type(); cv::Mat out; int result_cols = img.cols - tem.cols + 1; int result_rows = img.rows - tem.rows + 1; out.create(result_rows, result_cols, CV_32FC1); Log::info << "tem " << tem.type() << " " << type2str(tem.type()); // img.convertTo(img, tem.type()); cv::cvtColor(img, img, cv::COLOR_RGBA2RGB); Log::info << "converted img: " << img.type() << " " << type2str(img.type()); cv::matchTemplate(img, tem, out, cv::TM_SQDIFF); cv::normalize(out, out, 0, 1, cv::NORM_MINMAX, -1, cv::Mat()); double minVal; double maxVal; cv::Point minLoc; cv::Point maxLoc; cv::Point matchLoc; cv::minMaxLoc( out, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat() ); matchLoc = minLoc; cv::rectangle(img, matchLoc, cv::Point( matchLoc.x + tem.cols , matchLoc.y + tem.rows ), cv::Scalar(255, 0, 0, 0), 2); cv::imshow("result", img); cv::waitKey(0); time_t t = time(0); cv::imwrite("debugimages/" + std::to_string(t) + ".png", img); Log::stop(); return 0; }