2014-01-20 3 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)); 

создает матрицу, которая указывает на область исходного изображения, указанного прямоугольника (х, у, ширина, высота). Изменение 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

Смежные вопросы