morteza kavakebi
morteza kavakebi

Reputation: 1680

how to imRotate with OpenCV 2.4.3?

how can i implement imrotate(Mat src,Mat dst,double angle) using OpenCV 2.4.3? there is a function warpAffine() but it does to much more and is confusing. and it crops what goes out of bounds.

i want it to make a bigger the canvas to fit everything. and fill empty spots with black.

Upvotes: 4

Views: 3012

Answers (2)

morteza kavakebi
morteza kavakebi

Reputation: 1680

I solved it like this. thank to your answer.

Mat rotateImage(const Mat source, double angle,int border=20)
{
    Mat bordered_source;
    int top,bottom,left,right;
    top=bottom=left=right=border;
    copyMakeBorder( source, bordered_source, top, bottom, left, right, BORDER_CONSTANT,cv::Scalar() );
    Point2f src_center(bordered_source.cols/2.0F, bordered_source.rows/2.0F);
    Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
    Mat dst;
    warpAffine(bordered_source, dst, rot_mat, bordered_source.size());  
    return dst;
}

Upvotes: 7

Abhishek Thakur
Abhishek Thakur

Reputation: 17015

use copyMakeBorder with scalarAll(0) for the original image, then use the rotation matrix and transform using warpAffine. The border should be large enough to contain the rotated image. Use warpAffine with CV_WARP_FILL_OUTLIERS, again with scalarAll(0)

Upvotes: 3

Related Questions