2013-11-25 206 views
5

簡單的問題,但無法弄清楚。cv :: mask應該如何用於opencv minMaxLoc?

normaly其無效minMaxLoc(InputArray SRC,雙* MINVAL,雙* MAXVAL = 0,點* minLoc = 0,點* MAXLOC = 0,InputArray面膜= noArray()) 但如何面具的樣子?

這就是我想要的:它的一維Mat(只有一行),我想要mat(maxRowGChnnl)的區間(從lower到upperBorder)的minMax位置。

int lowerBorder,upperBorder; 
lowerBorder = 30; 
upperBorder = 100; 
cv::minMaxLoc(maxRowGChnnl.row(0),&minValue,&maxValue,&minLoc,&maxLoc,(lowerBorder,upperBorder)); 

這是maxRowGChnnl大小:

maxRowGChnnl {flags=1124024325 dims=2 rows=1 ...} cv::Mat 
flags 1124024325 int 
dims 2 int 
rows 1 int 
cols 293 int 

以上abborts的代碼:

OpenCV Error: Assertion failed ((cn == 1 && (mask.empty() || mask.type() == CV_8 
U)) || (cn >= 1 && mask.empty() && !minIdx && !maxIdx)) in unknown function, fil 
e ..\..\..\src\opencv\modules\core\src\stat.cpp, line 787 

感謝您的幫助。

回答

5

您並不真正需要掩碼,而是使用maxRowGChnnl的子矩陣。你可以這樣做:

cv::minMaxLoc(maxRowGChnnl(Rect(lower,0,upper-lower,0)),&minValue,&maxValue,&minLoc,&maxLoc); 
+0

這是我正在考慮的答案(它被解決的方式)。但實際上它不起作用。打印maxLoc時,我將[-1,-1]重新關閉。打印maxRowGChnnl(cv :: Rect(lower,0,upper-lower,0))時,輸出爲[] - 空。但是mat maxRowGChnnl有值!我究竟做錯了什麼? – user1651460

+1

Oups。我的錯。當然,身高應該是1。不是0.使用maxRowGChnnl(cv :: Rect(lower,0,upper-lower,1)) –

+0

完美。而已!好吧,我現在看到矩形的構造。 – user1651460

4

掩碼應爲cv :: Mat與axRowGChnnl.row(0)的大小相同,並鍵入CV_8UC1。已啓用元素的值應等於1禁用0.