Affine transformation is the projection of points onto the image plane along parallel.
ขั้นแรก โหลดภาพตั้งต้นเข้าตัวแปร img
First, load a source image to img
- Image<Bgr, byte> img = new Image<Bgr, byte>(image_path);
Source Image |
ขั้นที่สอง ระบุพิกัดจุดทั้งสามภายในภาพตั้งต้น
Second, specify three points within source image
- PointF[] old_point=new PointF[3];
- old_point[0]=new PointF(61,95);
- old_point[1]=new PointF(267,95);
- old_point[2]=new PointF(61,250);
ขั้นที่สาม ระบุพิกัดจุดทั้งสามภายในภาพปลายทาง
Third, specify three points within destination image
- PointF[] new_point = new PointF[3];
- new_point[0] = new PointF(91, 95);
- new_point[1] = new PointF(297, 95);
- new_point[2] = new PointF(61, 250);
ขั้นต่อไป คำนวณเมทริกซ์การแปลง
Next, calculate transformation matrix
- RotationMatrix2D<double> mywarpmat = CameraCalibration.GetAffineTransform(old_point, new_point);
ขั้นต่อไป แปลงจากภาพตั้งต้นไปเป็นภาพปลายทาง โดยใช้เมทริกซ์การแปลง ในกรณีนี้ ภาพตั้งต้นและภาพปลายทางเป็นภาพเดียวกัน
Next, transform source image to destination image, in this case, source image and destination image are the same - img=img.WarpAffine(mywarpmat, INTER.CV_INTER_LINEAR, WARP.CV_WARP_FILL_OUTLIERS, new Bgr());
ถ้าภาพปลายทางต้องถูกตัดให้กว้าง width และสูง height ให้ใช้
If destination image must be cropped to width and height, use
- img = img.WarpAffine(mywarpmat, width, height, INTER.CV_INTER_LINEAR, WARP.CV_WARP_FILL_OUTLIERS, new Bgr());
ขั้นสุดท้าย แสดงภาพปลายทางที่ทำการแปลงเรียบร้อยแล้ว
Finally, show a destination image - CvInvoke.cvShowImage("img", img.Ptr);
- CvInvoke.cvWaitKey(0);
No comments:
Post a Comment