ios - 为什么这种旋转方法会给图像带来死角?打开简历

标签 ios image opencv rotation

我正在使用这种方法来旋转一个 cvMat,每当我运行它时,我都会得到一个旋转的图像,但是它下面有很多死角。

void rotate(cv::Mat& src, double angle, cv::Mat& dst)
{
    int len = std::max(src.cols, src.rows);
    cv::Point2f pt(len/2., len/2.);
    cv::Mat r = cv::getRotationMatrix2D(pt, angle, 1.0);

    cv::warpAffine(src, dst, r, cv::Size(len, len));

}

当给出这张图片时:

enter image description here

我得到这张图片:

enter image description here

图像已经旋转,但是你可以看到已经添加了一些额外的像素,我怎样才能只旋转原始图像而不添加任何额外的像素?

方法调用:

旋转(src, skew, res); resdst

最佳答案

正如 ma​​yank-baddi 所说,你必须使用与输入相同的输出图像大小来解决这个问题,我的回答是基于你上面的评论 我如何避免添加黑色区域? 在 wrapAffine 之后,

所以你必须这样做,

  • 创建比您的源大一点的白色图像,这将取决于您的倾斜角度,这里我使用了 50 像素。

    int extend=50;
    Mat tmp(src.rows+2*extend,src.cols+2*extend,src.type(),Scalar::all(255));
    
  • 使用ROI复制源码到上面

    Rect ROI(extend,extend,src.cols,src.rows);
    src.copyTo(tmp(ROI));
    
  • 现在旋转 tmp 而不是 src

    rotate(tmp, skew, res); res being dst.
    
  • 使用相同的 ROI 从旋转结果中裁剪出最终图像。

     Mat crop=res(ROI);  
     imshow("crop",crop);
    

enter image description here

关于ios - 为什么这种旋转方法会给图像带来死角?打开简历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147752/

相关文章:

python - 使用PIL将一张512*256的图片分成2张每张256*256的图片

Python OpenCV 立体相机位置

python opencv - Blob 检测或圆检测

python - OpenCV - 应用霍夫线变换后裁剪图像

ios - 截图 UIImageView 和 UILabel 然后分享

ios - Cordova 不适用于 iOS 多目标

objective-c - 如何删除关系中的所有子实体?

ios - 如何从完成的 `NSURLSessionDataTask` 获取数据?

html - CSS float ul 列表和段落

javascript - 如何使用 Javascript 在页面加载时加载图像?