在OpenCV中对图像的某个特定区域应用锐化函数

3

我想将Tenengrad算法应用于图像内的中心矩形区域。假设我有矩形区域顶点的坐标或者可能有一个角落和尺寸,我该如何修改以下代码以在所选区域应用锐度测量?

double tenengrad(const cv::Mat& src, int ksize)
{
    cv::Mat Gx, Gy;
    cv::Sobel(src, Gx, CV_64F, 1, 0, ksize);
    cv::Sobel(src, Gy, CV_64F, 0, 1, ksize);

    cv::Mat FM = Gx.mul(Gx) + Gy.mul(Gy);

    double focusMeasure = cv::mean(FM).val[0];
    return focusMeasure;
}
1个回答

3
cv::Mat imageRegion;
imageRegion = src(cv::Rect(x, y, width, height));

创建一个矩阵,用于指向由矩形(x、y、width、height)指定的原始图像的区域。修改imageRegion会修改原始图像src。因此,您可以使用imageRegion代替src

 cv::Mat Gx, Gy;
 cv::Sobel(imageRegion, Gx, CV_64F, 1, 0, ksize);
 cv::Sobel(imageRegion, Gy, CV_64F, 0, 1, ksize);

 cv::Mat FM = Gx.mul(Gx) + Gy.mul(Gy);

 double focusMeasure = cv::mean(FM).val[0];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接