当前位置:  开发笔记 > 编程语言 > 正文

使用opencv warpaffine时如何保持白色背景

如何解决《使用opencvwarpaffine时如何保持白色背景》经验,为你挑选了1个好方法。

我正在尝试使用旋转图像

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(src.cols, src.rows));
}

通过给出角度,源和目标图像.旋转工作正常如下.

在此输入图像描述

我想让黑色区域变白.我试过了

cv::Mat dst = cv::Mat::ones(src.cols, src.rows, src.type());

在调用rotate之前,但结果没有变化.我怎样才能做到这一点?

注意:我正在寻找在进行旋转时实现此目的的解决方案.显然,通过在旋转后使黑色区域变白可以实现.



1> ajshort..:

您将需要使用函数的borderModeborderValue参数warpAffine来实现此目的.通过将模式设置为BORDER_CONSTANT它将对边框像素(即图像外部)使用常量值,并且可以将值设置为要使用的常量值(即白色).它看起来像:

cv::warpAffine(src, dst, r,
               cv::Size(src.cols, src.rows),
               cv::INTER_LINEAR,
               cv::BORDER_CONSTANT,
               cv::Scalar(255, 255, 255));

有关更多详细信息,请参阅OpenCV API文档.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有