如何使用 OpenCV 逐渐淡化图像的底部边框?

How would I gradually lighten the bottom border of an image with OpenCV?

例如,我有一个包含 1000 行的图像。第 900 行应该看起来像原来的一样。我有一个 alpha 和 beta,我想应用到第 1000 行到 100%,到第 950 到 50%,到第 925 到 25%。换句话说:我想将图像的较低 10% 与线性渐变混合。 OpenCV 中是否有一种通用方法,无需修改每个离散像素,也无需首先生成与原始尺寸相同的 Mat?

我在 C# 中使用 OpenCVSharp 包装器。

在 C++ 上的实现:

cv::Mat img = cv::imread("lena.jpg");

int startBlend = 3 * img.rows / 4;
double alpha = 1.0;
double step = 1.0 / (img.rows - startBlend);
for (int y = startBlend; y < img.rows; ++y)
{
    img.row(y) *= alpha;
    alpha -= step;
}

cv::imshow("img", img);
cv::waitKey(0);

结果: