lolautoaccept/src/main.cpp

82 lines
1.9 KiB
C++

#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;
}