In this project, we wrote a program that can automatically stitch and blend several photos to create panorama. First of all, we warp the images onto a cylinder so they can be joined. Then we apply feature detection and feature matching algorithm (using MSOP and KD-tree) to find the corresponding pixels in consecutive images. Next, we use RANSAC algorithm to robustly stitch the images by exploiting the pixel matching informations. Then we perform a greedy graph cut algorithm to find good seamlines between consecutive images. And at last, we wrote a conjugate gradient solver to solve for the partial differential equation (with the seamline found using graph cut as the boundary condition) used in Poisson Blending to seamlessly combine the images. Due to our sophisticated blending technique, our produced panorama is robust and natural. For example, it can handle the case when people have moved during the shooting of panorama. Therefore our artifacts have won the first place when taking this course with ~130 competitors. We have wrote everything in C++ with openCV for image I/O.