Assuming compared images will have the same scale:
// read template and convert it to polar coordinates
int radius = 100;
Mat target = imread("target.jpg);
Mat template;
cvLinearPolar(target, template, Point(target.cols/2, target.rows/2), ...);
// read src
Mat src = imread("src.jpg);
// initialize values to store best match
double best_score = DBL_MAX;
double best_x = -1;
double best_y = -1;
double best_angle = -1;
for (x=0;x<src.width;x++)
for (y=0;y<src.height;y++) {
Mat polar;
cvLinearPolar(src, polar, Point(x,y), ...);
... calculate the best rotation angle that produces smallest difference
... between matched template and a calculated polar image
if (min_difference < best_score) {
... update score, x, y, angle ...
}
}
... best_x, best_y, best_angle should now store the best object location