To make it easier we want to have a bird eye view so that the lane lines become parallel to each other. OpenCV has built-in function to do the transformation. So we just use that. The process is called wrap perspective mapping (WPM) and we need to provide 4 points on the original image (I have marked them red in the image above) and a corresponding real world co-ordinate. I have just made up the numbers to make them parallel.
Here is the result:
And here is the code (just a demo- without error handling):
#include "iostream"
#include "cv.h"
#include "highgui.h"
using namespace std;
using namespace cv;
void ipm(const char *input_path, const char *output_path)
{
Mat src, dst;
src=imread(input_path, 1);
Point2f img_vertices[4];
img_vertices[0] = Point(213, 104);
img_vertices[1] = Point(410, 106);
img_vertices[2] = Point(6, 372);
img_vertices[3] = Point(540, 400);
Point2f world_vertices[4];
world_vertices[0] = Point(26, 104);
world_vertices[1] = Point(540, 106);
world_vertices[2] = Point(26, 400);
world_vertices[3] = Point(540, 400);
Mat warpMatrix = getPerspectiveTransform(img_vertices, world_vertices);
warpPerspective(src, dst, warpMatrix, dst.size(), INTER_LINEAR);
imwrite(output_path, dst);
}
int main(int argc, char** argv)
{
ipm(argv[1], "ipm.jpg");
return 0;
}
At the end of all steps the goal is to detect all paths and objects
in the http://www.cvlibs.net/datasets/kitti/index.php dataset.


No comments:
Post a Comment