旋转(偏斜校正)图像与白色背景

时间:2016-03-01 00:25:08

标签: c++ opencv

这里我有一个deskew类的一部分..如果/当图像旋转时它会像这样结束。如何在旋转的图像“后面”添加白色背景?

enter image description here

void Deskew::rotate(cv::Mat& im, double thetaRad){
    double rskew = thetaRad * CV_PI / 180;
    double nw = std::abs(sin(thetaRad)) * im.rows + std::abs(cos(thetaRad)) * im.cols;
    double nh = std::abs(cos(thetaRad)) * im.rows + std::abs(sin(thetaRad)) * im.cols;
    cv::Mat rot_mat = cv::getRotationMatrix2D(cv::Point2d(nw * 0.5, nh * 0.5), thetaRad * 180 / CV_PI, 1);
    cv::Mat pos = cv::Mat::zeros(cv::Size(1, 3), CV_64FC1);
    pos.at<double>(0) = (nw - im.cols) * 0.5;
    pos.at<double>(1) = (nh - im.rows) * 0.5;
    cv::Mat res = rot_mat * pos;
    rot_mat.at<double>(0, 2) += res.at<double>(0);
    rot_mat.at<double>(1, 2) += res.at<double>(1);
    cv::warpAffine(im, im, rot_mat, cv::Size(nw, nh), cv::INTER_LANCZOS4);
}

0 个答案:

没有答案