łatwe pytanie, ale nie można tego rozgryźć.Jak powinna wyglądać maska cv :: dla opencv minMaxLoc?
normalnie jej nieważności minMaxLoc (InputArray src dwukrotnie * MINVAL dwukrotnie * MAXVAL = 0, punkt * minLoc = 0, punkt * maxLoc = 0, InputArray maska = noArray()) Ale jak maska wygląda?
Oto czego chcę: jest to jednowymiarowa mata (tylko jeden rząd) i chcę mieć położenie minMax odstępu (dolnego do górnego) macie (maxRowGChnnl).
int lowerBorder,upperBorder;
lowerBorder = 30;
upperBorder = 100;
cv::minMaxLoc(maxRowGChnnl.row(0),&minValue,&maxValue,&minLoc,&maxLoc,(lowerBorder,upperBorder));
Jest to rozmiar maxRowGChnnl:
maxRowGChnnl {flags=1124024325 dims=2 rows=1 ...} cv::Mat
flags 1124024325 int
dims 2 int
rows 1 int
cols 293 int
Powyższy kod abborts z:
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
Dzięki za pomoc.
to jest odpowiedź, którą myślałem (sposób jest rozwiązany). Ale tak naprawdę to nie zadziałało. Podczas drukowania maxLoc ponownie zapisuję [-1, -1]. Podczas drukowania maxRowGChnnl (cv :: Rect (lower, 0, upper-lower, 0)) wynik jest [] - pusty. Ale Mat maxRowGChnnl ma w sobie wartości! Co ja robię źle? – user1651460
Oups. Mój błąd. Wysokość powinna oczywiście wynosić 1. Nie 0. Użyj maxRowGChnnl (cv :: Rect (niżej, 0, upper-lower, 1)) –
Idealny. To jest to! dobrze widzę teraz budowę recta. – user1651460