MatchTemplate возвращает пустой массив из-за этого, как думаю, появляется ошибка При попытке сделать скриншот экрана и отправки его в matchTemplate получаю пустой result_mat и из за этого выбивает ошибку cv::Exception, хотя если сначала сохранить его в папке а потом прочитать то все работает.
При попытке сделать скриншот экрана и отправки его в matchTemplate получаю пустой result_mat и из за этого выбивает ошибку cv::Exception, хотя если сначала сохранить его в папке а потом прочитать то все работает.
код
Mat screen()
{
HWND windowHWND = FindWindow(NULL, L"Google Chrome");
HDC windowDC = GetDC(windowHWND);
HDC newDC = CreateCompatibleDC(windowDC);
int Width = GetDeviceCaps(windowDC, HORZRES);
int Height = GetDeviceCaps(windowDC, VERTRES);
HBITMAP hBmp = CreateCompatibleBitmap(windowDC, Width, Height);
SelectObject(newDC, hBmp);
BitBlt(newDC, 0, 0, Width, Height, windowDC, 0, 0, SRCCOPY | CAPTUREBLT);
//Описание рабочего массива бит совместимого контекста в памяти
BITMAPINFO BMI;
BMI.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BMI.bmiHeader.biWidth = Width;
BMI.bmiHeader.biHeight = -Height;
BMI.bmiHeader.biPlanes = 1;
BMI.bmiHeader.biBitCount = 32;
BMI.bmiHeader.biCompression = BI_RGB;
Mat screen = Mat(Height, Width, CV_8UC4);
GetDIBits(newDC, hBmp, 0, Height, screen.data, &BMI, DIB_RGB_COLORS);
// освобождаем ресурсы
ReleaseDC(windowHWND, windowDC);
DeleteObject(hBmp);
DeleteDC(newDC);
return screen;
}
int main()
{
Mat src_img;
Mat template_img;
Mat result_mat;
Mat debug_img;
template_img = imread(a);
src_img=screen();
cvtColor(src_img, debug_img, CV_8U);
double minVal;
double maxVal=0;
cv::Point minLoc1, maxLoc1, matchLoc1;
int match_method = CV_TM_CCOEFF_NORMED;
try
{
matchTemplate(src_img, template_img, result_mat, match_method,noArray());
minMaxLoc(result_mat, &minVal, &maxVal, &minLoc1, &maxLoc1, Mat());
}
catch (const cv::Exception&)
{
}
if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED) matchLoc1 = minLoc1;
else matchLoc1 = maxLoc1;
if (maxVal > 0.75 )
{
click(matchLoc1.x,matchLoc1.y);
}
src_img.release();
template_img.release();
result_mat.release();
debug_img.release();
return 1;
}