Running cv::warpPerspective on points

You want perspectiveTransform (which works on a vector of Points) rather than warpPerspective. Take the inverse of warpMatrix; you may have to tweak the final column.

vector<Point2f> dstPoints, srcPoints;
dstPoints.push_back(Point2f(1,1));

cv::perspectiveTransform(dstPoints,srcPoints,warpMatrix.inv());

A perspective transform relates two points in the following manner:

[x']   [m00 m01 m02] [x]
[y'] = [m10 m11 m12] [y]
[1]    [m20 m21 m22] [1]

Where (x,y) are the original 2D point coordinates, and (x', y') are the transformed coordinates.

In your case, you know (x', y'), and want to know (x, y). This can be achieved by multiplying the known point by the inverse of the transformation matrix:

cv::Matx33f warp = warpMatrix;          // cv::Matx is much more useful for math
cv::Point2f warped_point = dstQuad[3];  // I just use dstQuad as an example
cv::Point3f homogeneous = warp.inv() * warped_point;
cv::Point2f result(homogeneous.x, homogeneous.y);  // Drop the z=1 to get out of homogeneous coordinates
// now, result == srcQuad[3], which is what you wanted