Cv :: मास्क Opencv minMaxLoc के लिए कैसा दिखना चाहिए?

आसान सवाल है लेकिन इसे समझ नहीं सकता है।

Normaly इसके शून्य minMaxLoc (इनपुट आरेखण स्रोत, डबल * minVal, डबल * maxVal = 0, प्वाइंट * minLoc = 0, प्वाइंट * maxLoc = 0, इनपुट आकृति मुखौटा = noArray ()) लेकिन मुखौटा कैसा दिखता है?

यह वही है जो मैं चाहता हूं: इसकी एक-आयामी मट (केवल एक पंक्ति) और मैं मैट (maxRowGChnnl) के अंतराल (ऊपरी सीमा तक कम) का 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

आपकी सहायता के लिए धन्यवाद.

0

2 उत्तर

मास्क सीवी होना चाहिए :: axRowGChnnl.row (0) के समान आकार को मैट करें और CV_8UC1 टाइप करें। सक्षम तत्वों के मान 1 अक्षम 0 के बराबर होना चाहिए।

0
जोड़ा

आपको वास्तव में मास्क की आवश्यकता नहीं है, लेकिन maxRowGChnnl का उप-मैट्रिक्स। आप इसे कर सकते हैं:

cv::minMaxLoc(maxRowGChnnl(Rect(lower,0,upper-lower,0)),&minValue,&maxValue,&minLoc,&maxLoc);
0
जोड़ा
यही वह जवाब है जिसे मैं सोच रहा था (जिस तरह से इसे हल किया गया है)। लेकिन वास्तव में यह काम नहीं किया। MaxLoc मुद्रण करते समय मैं [-1, -1] शोध। MaxRowGChnnl मुद्रण करते समय (सीवी :: रेक्ट (निचला, 0, ऊपरी-निचला, 0)) आउटपुट [] - खाली है। लेकिन मैट maxRowGChnnl में मूल्य है! मैं क्या गलत कर रहा हूं?
जोड़ा लेखक user1651460, स्रोत
उत्तम। बस! ठीक है अब मैं rect के निर्माण को देखते हैं।
जोड़ा लेखक user1651460, स्रोत
Oups। मेरी गलती। ऊंचाई निश्चित रूप से 1 होना चाहिए। नहीं 0. maxRowGChnnl का उपयोग करें (सीवी :: रेक्ट (निचला, 0, ऊपरी-निचला, 1))
जोड़ा लेखक Michael Burdinov, स्रोत