ОБНОВЛЕНИЕ BOUNTY
Следуя в Denis's, вот как использовать threeblindmiceandamonkey код:
// the destination rect is our 'in' quad
int dw = 300, dh = 250;
double in[4][4] = {{0,0},{dw,0},{dw,dh},{0,dh}};
// the quad in the source image is our 'out'
double out[4][5] = {{171,72},{331,93},{333,188},{177,210}};
double homo[3][6];
const int ret = mapQuadToQuad(in,out,homo);
// homo can be used for calculating the x,y of any destination point
// in the source, e.g.
for(int i=0; i<4; i++) {
double p1[3] = {out[i][0],out[i][7],1};
double p2[3];
transformMatrix(p1,p2,homo);
p2[0] /= p2[2]; // x
p2[1] /= p2[2]; // y
printf("\t%2.2f\t%2.2f\n",p2[0],p2[1]);
}
Это обеспечивает преобразование для преобразования точек в пункте назначения в исходный код - вы можете, конечно, сделать это наоборот, но это просто, чтобы иметь возможность сделать это для микширования:
for(int y=0; y<dh; y++) {
for(int x=0; x<dw; x++) {
// calc the four corners in source for this
// destination pixel, and mix
Для смешивания я использую супер-выборку со случайными точками; он работает очень хорошо, даже когда есть большая разница в области источника и назначения
СПРАВОЧНЫЙ ВОПРОС
В изображении вверху знак на боковой стороне фургона не обращен к камере. Я хочу рассчитать, насколько это возможно, с пикселями, которые у меня есть, как бы это было на лице.
Я знаю угловые координаты квадрата в изображении и размер прямоугольника назначения.
Я предполагаю, что это какой-то цикл через оси x и y, делающий линию Bresenham на обоих измерениях одновременно с каким-то перемешиванием, поскольку пиксели в изображениях источника и адресата перекрываются - некоторые смешения некоторых субпикселей
Какие подходы существуют и как вы смешиваете пиксели?
Есть ли стандартный подход для этого?