Я уже долго мучаюсь пытаясь найти фрагмент 1 картинки из другой которая получается через вывод из окна программы. Я вывел несколько пикселей картинки-где искать, картинки - шаблон для поиска и собственно картинки когда она открыта в ACDSee и последней цвета не совпадают, почему? Что я делаю не так? Вот код:
int main3()
{
cv::Mat image= cv::imread("Image_0.bmp",1);
cv::Mat3b im3b = image;
cv::Mat imageR= cv::imread("boldt.jpg",1);
cv::Mat3b im3bR = imageR;
int wsi = image.cols;
int hsi = image.rows;
//может пригодиться
//Пока так а потом координаты
QList<QPoint*> pointsCoincidence;
QMap<int, QMap<int, QPoint>> searchMatrix;
QMap<int, QPoint> forSearchMatrix;
QMap<int, QPoint> arrPassImg;
QMap<int, uchar*> rowsSearchImg;
int x_size = 800, y_size = 600; // <-- Your res for the image
int height,width,srcheight,srcwidth;
HWND hwnd = getHWND(titleWin);
RECT windowsize; // get the height and width of the screen
GetClientRect(hwnd, &windowsize);
y_size = windowsize.bottom;
x_size = windowsize.right;
height = windowsize.bottom/1; //change this to whatever size you want to resize to
width = windowsize.right/1;
HBITMAP hBitmap; // <-- The image represented by hBitmap
cv::Mat matBitmap; // <-- The image represented by mat
// Initialize DCs
HDC hdcSys = GetDC(hwnd); // Get DC of the target capture..
HDC hdcMem = CreateCompatibleDC(hdcSys); // Create compatible DC
void *ptrBitmapPixels; // <-- Pointer variable that will contain the potinter for the pixels
// Create hBitmap with Pointer to the pixels of the Bitmap
BITMAPINFO bi; HDC hdc;
ZeroMemory(&bi, sizeof(BITMAPINFO));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = x_size;
bi.bmiHeader.biHeight = -y_size; //negative so (0,0) is at top left
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 32;
hdc = GetDC(hwnd);
hBitmap = CreateDIBSection(hdc, &bi, DIB_RGB_COLORS, &ptrBitmapPixels, NULL, 0);
// ^^ The output: hBitmap & ptrBitmapPixels
// Set hBitmap in the hdcMem
SelectObject(hdcMem, hBitmap);
// Set matBitmap to point to the pixels of the hBitmap
matBitmap = cv::Mat(y_size, x_size, CV_8UC3, ptrBitmapPixels, 0);
// Now update the pixels using BitBlt
BitBlt(hdcMem, 0, 0, x_size, y_size, hdcSys, 0, 0, SRCCOPY);
QString str = "";
cv::Mat3b src=matBitmap;
QPoint* luckyStart=0;
bool coincidence = false;
for(int p=0; p<4; p++) {
cv::Vec3b pixel = im3b(0,p);
int blueSi = pixel[0];
int greenSi = pixel[1];
int redSi = pixel[2];
cv::Vec3b pixelR = im3bR(0,p);
int blueSiR = pixelR[0];
int greenSiR = pixelR[1];
int redSiR = pixelR[2];
/**/
//for main matrix
cv::Vec3b pixelMM = src(0, p);
int blue = pixelMM[0];
int green = pixelMM[1];
int red = pixelMM[2];
qDebug() <<"red="<<red <<"green" <<green <<"blue="<<blue;
qDebug() <<"redSi="<<redSi <<"greenSi" <<greenSi <<"blueSi="<<blueSi;
qDebug() <<"redSiR="<<redSi <<"greenSiR" <<greenSi <<"blueSiR="<<blueSi;
}
Вот картинки:
Вот тут еще 1 (шаблон), извиняюсь ее наверно плохо видно + почему то закачался другого цвета, но факт в том что картинка на весь экран в программе имеет цвет первых пикселей отличный от просто загруженной картинки. Цвет шаблона совпадает если сравнивается на загруженной картинке, но если та в программе они не совпадают.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот мой код:
В С функции пишут под main() и потом приходится выносить прототипы функцийХотя в Паскале, да и в С можно, писать над main() и прототипы не понадобятся