26 Mart 2018 Pazartesi

OpenCV Geometric Image Transformations

convertMaps metodu
Örnek ver

getAffineTransform metodu
Örnek ver

getPerspectiveTransform metodu
Açıklaması şöyle
If we were flying over the road, and watching it from a bird’s eye view, the lanes would be parallel, but in the picture, they are not, because of the perspective.
...
OpenCV has a method to compute the perspective transformation: getPerspectiveTransform().

It takes two parameters, both arrays of four points, identifying the trapezoid of the perspective. One array is the source and one array is the destination. 
Şeklen şöyle. Yeşil şerit çizgilerini verince, beyaz perspective şeklini elde ederiz.

Perspective'den geriye dönüş te mümkün. Şöyle yaparız
perspective_correction = cv2.getPerspectiveTransform(src, dst)
perspective_correction_inv = cv2.getPerspectiveTransform(dst, src)
getRectSubPix metodu
Örnek ver

getRotationMatrix2D metodu
Örnek ver

invertAffineTransform metodu
Örnek ver

LinearPolar metodu
Örnek ver

LogPolar metodu
Örnek ver

remap metodu
Örnek ver

resize metodu
Birinci parametre girdi resim, ikinci parametre çıktı resim, üçüncü parametre çıktı resimimin büyüklüğü, dördüncü parametre x ekseninde scale, beşinci parametre y eksenindeki scale, altınca prametre interpolation yöntemidir.

Örnek
Bir resmin diğerinin boyutlarına getirmek için şöyle yaparız.
Mat bg_frame = ...;
Mat cam_frame = ...;
Mat diff_frame;

resize(cam_frame, cam_frame, bg_frame.size());
Örnek
Resmi iki kat küçültmek için şöyle yaparız.
cv::Mat image = ...;
cv::Mat small;
cv::resize(image, small, image.size()/2, 0, 0 , cv::INTER_LINEAR);
warpAffine metodu
İmzası şöyle
cv::warpAffine (InputArray src,     // input mat
                OutputArray dst,    // output mat
                InputArray M,       // affine transformation mat
                Size dsize)         // size of the output mat
M matrisi şöyle
      a11 a12 ofx
      a21 a22 ofy
Örnek
Elimizde bir resim olsun.
Mat image = ...
Bu resmi dönüştürmek için M değerlerini ilklendirmek için şöyle yaparız.
Mat m;

m = Mat(2, 3, CV_64FC1); // Allocate memory

m.at<double>(0,0)=  1.01121;  //p1
m.at<double>(1,0)=  0.21067 ;  //p2;
m.at<double>(0,1)= -89.69693; //p3;
m.at<double>(1,1)= - 0.11557;  //p4;
m.at<double>(0,2)= 1.44982;   //p5;
m.at<double>(1,2)= -193.66149;//p6;
Çıktı matrisini hazırladıktan sonra şöyle yaparız.
Mat imgAffine = Mat::zeros(image.rows, image.cols, image.type());
warpAffine(image,imgAffine,par, image.size(),INTER_LINEAR);
warpPerspective metodu
Kamreranın yerini değiştirir. Örneğin bir resmi kuş bakışı hale getirebilir

Örnek
Şöyle yaparız
cv2.warpPerspective(img, perspective_correction, warp_size, flags=cv2.INTER_LANCZOS4)
Açıklaması şöyle
The warpPerspective() method accepts four parameters:

1. The source image.
2. The transformation matrix, obtained from getPerspectiveTransform().
3. The size of the output image. In our case, the width is the same as the original image, but the height is only the height of the trapezoid/rectangle.
4. Some flags, to specify the interpolation. INTER_LINEAR is a common choice, but I recommend experimenting, and to give INTER_LANCZOS4 a try.
Örnek
Şöyle yaparız.
Size matSize = ...;

Mat transmtx = ...;

warpPerspective(mat, mat, transmtx, matSize);

initUndistortRectifyMap metodu
Örnek ver

getDefaultNewCameraMatrix metodu
Örnek ver

undistort metodu
Örnek ver

undistortPoints metodu
Örnek ver

Hiç yorum yok:

Yorum Gönder