我想将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;
}
答案 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];