在图像OpenCV的某个区域应用锐度函数

时间:2014-01-20 14:20:44

标签: opencv image-processing

我想将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 个答案:

答案 0 :(得分: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];