Я пытаюсь использовать ускорение графического процессора (DirectX / C ++) для рисования многоугольника на 2D-изображении.
После завершения рисования я хочу пройтись по всем пикселям и оценить их, чтобы получить «оценку» финала /сгенерированное изображение (сравните с целевым изображением).Затем следует вернуть окончательный результат из графического процессора.
Я знаю, что при чтении из графического процессора возникают большие накладные расходы, но мне нужна скорость рендеринга графического процессора, а не процессора (GDI + или openCV).
Яделать что-то похожее на EvoLisa .
Каков наилучший подход для достижения этой цели?
Оценка в настоящее время оценивается следующим образом:
// Render image
cv::Mat generatedImage = EvoRenderer::render(individual, heigth, width, dimension, corners, parameters);
// Evaluate generated image
double* colors = new double[generatedImage.channels()];
for (int i = 0; i < generatedImage.channels(); ++i) {
colors[i] = double(0.0);
}
for (int j = 0; j < this->heigth; ++j)
for (int i = 0; i < this->width; ++i)
{
RGB& targetRGB = targetImage.ptr<RGB>(j)[i];
RGB& generatedRGB = generatedImage.ptr<RGB>(j)[i];
colors[0] += fabs(targetRGB.blue - generatedRGB.blue);
colors[1] += fabs(targetRGB.green - generatedRGB.green);
colors[2] += fabs(targetRGB.red - generatedRGB.red);
}
long double error = 0;
const double divider = 255.0 * this->width * this->heigth;
for (int i = 0; i < generatedImage.channels(); i++)
error += colors[i] / divider;
error *= double(100.0);
// Set fitnes to current individual
individual.setEval(error);
// Delete pointers
delete[] colors;