2014-01-20 71 views
2

我想將Tenengrad算法應用到圖像中的中心矩形區域。假設我有矩形區域的頂點座標或者一個角和尺寸,我如何修改以下代碼以在選定區域上應用銳度度量?在圖像的某個區域應用清晰度函數OpenCV

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; 
} 

回答

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

創建指向由矩形(X,Y,寬度,高度)中指定的原始圖像的區域的矩陣。修改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]; 
+0

謝謝老兄!我將編輯代碼並儘快找回你。 – Roy2511