使用opencv warpaffine时如何保持白色背景
How to maintain white background when using opencv warpaffine
我正在尝试使用
旋转图像
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());
在调用旋转之前,但结果没有变化。我怎样才能做到这一点?
注意:我正在寻找在旋转时实现此目的的解决方案。显然,通过在旋转后将黑色区域变成白色可以实现这一点。
您需要使用 warpAffine
函数的 borderMode
和 borderValue
参数来完成此操作。通过将模式设置为 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 Documentation。
我正在尝试使用
旋转图像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());
在调用旋转之前,但结果没有变化。我怎样才能做到这一点?
注意:我正在寻找在旋转时实现此目的的解决方案。显然,通过在旋转后将黑色区域变成白色可以实现这一点。
您需要使用 warpAffine
函数的 borderMode
和 borderValue
参数来完成此操作。通过将模式设置为 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 Documentation。