2013-04-11 26 views
15

maksimum değerini bulun Bir cv::Mat'un maksimum piksel değerini bulmaya çalışıyorum.Bir cv :: Mat

Sorun: *maxValue her zaman 0'u döndürüyor.

this S.O. thread'dan 'max_element döndürme yineleyicileri, değerler değil. Ben *maxValue kullanmamızın nedeni bu

cv::Mat imageMatrix; 

double sigmaX = 0.0; 
int ddepth = CV_16S; // ddepth – The desired depth of the destination image 


cv::GaussianBlur([self cvMatFromUIImage:imageToProcess], imageMatrix, cv::Size(3,3), sigmaX); 

cv::Laplacian(imageMatrix, imageMatrix, ddepth, 1); 

std::max_element(imageMatrix.begin(),imageMatrix.end()); 

std::cout << "The maximum value is : " << *maxValue << std::endl; 

Not "dir: min_elementmax_element yerine ikame ve minValuemaxValue yerine ise *minValue hep 0 dönecektir.

+0

Belki de imageMatrix her şey sıfırdır? Ne içerdiğini görmek için yazdırmayı deneyin. –

+0

Teşekkürler stardust_. Onu konsola yazdırdım ve öyle değil. –

+0

std :: max_element (imageMatrix.begin(), imageMatrix.end()) 'i kullanmaya çalıştığımda; 'Başlamak için eşleşen üye işlev çağrısı yok hatası aldım. Ben 'yi tam olarak anlamadım. –

cevap

35

std işlevi yerine OpenCV yerleşik işlevini minMaxLoc kullanmalısınız.

Mat m; 
//Initialize m 
double minVal; 
double maxVal; 
Point minLoc; 
Point maxLoc; 

minMaxLoc(m, &minVal, &maxVal, &minLoc, &maxLoc); 

cout << "min val : " << minVal << endl; 
cout << "max val: " << maxVal << endl; 
+1

Şerefe @ Şivakumar! Ben çift minVal kullandım; çift maxVal; cv :: minMaxLoc (imageMatrix, & minVal, & maxVal); ' –

+0

minMaxLoc, aradığınız şey görüntüdeki en yüksek değerse, oldukça yavaş bir işlevdir ... Daha geniş amaç işlevlerini kullanırken kaçınılması zor bir sorun . – Antonio

+0

@Antonio Bu cevap, minMaxLoc'ın süper hızlı olduğunu bildiriyor. Http://stackoverflow.com/a/26409969/1180117 – Kiran