如何使用OpenCV 2.4.3进行模拟?

时间:2013-02-14 07:48:54

标签: c++ opencv image-processing rotation

如何使用 OpenCV 2.4.3 实现imrotate(Mat src,Mat dst,双角度)? 有一个函数 warpAffine(),但它做得更多,令人困惑。它会超出界限。

我希望它能够使画布更大,以适应一切。用黑色填补空白点。

2 个答案:

答案 0 :(得分:7)

我这样解决了。谢谢你的回答。

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;
}

答案 1 :(得分:3)

对原始图像使用带有scalarAll(0)的copyMakeBorder,然后使用旋转矩阵并使用warpAffine进行变换。边框应足够大,以包含旋转的图像。将warpAffineCV_WARP_FILL_OUTLIERS一起使用,再次使用scalarAll(0)