2013-11-25 7 views
5

आसान सवाल लेकिन इसे समझ नहीं सकता है।सीवी :: मास्क Opencv minMaxLoc के लिए कैसा दिखना चाहिए?

normaly अपने शून्य minMaxLoc (InputArray src, डबल * minVal, डबल * maxVal = 0, प्वाइंट * minLoc = 0, प्वाइंट * maxLoc = 0, InputArray मुखौटा = noArray()) लेकिन यह कैसे मुखौटा की तरह लग रहा है?

यह वही है जो मैं चाहता हूं: यह एक आयामी मैट (केवल एक पंक्ति) है और मैं मैट (maxRowGChnnl) के अंतराल (ऊपरी सीमा तक कम) का minMax स्थान चाहता हूं।

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 

आपकी मदद के लिए धन्यवाद:

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

साथ कोड abborts ऊपर:

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

यह maxRowGChnnl आकार है।

उत्तर

5

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

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

यह वह उत्तर है जिसे मैं सोच रहा था (जिस तरह से इसे हल किया गया है)। लेकिन वास्तव में यह काम नहीं किया। MaxLoc मुद्रण करते समय मैं [-1, -1] शोध। MaxRowGChnnl मुद्रण करते समय (सीवी :: रेक्ट (निचला, 0, ऊपरी-निचला, 0)) आउटपुट [] - खाली है। लेकिन मैट maxRowGChnnl में मूल्य है! मैं क्या गलत कर रहा हूं? – user1651460

+1

ओप्स। मेरी गलती। ऊंचाई निश्चित रूप से 1 होना चाहिए। नहीं 0. maxRowGChnnl का उपयोग करें (सीवी :: रेक्ट (निचला, 0, ऊपरी-निचला, 1)) –

+0

बिल्कुल सही। बस! ठीक है अब मैं rect के निर्माण को देखते हैं। – user1651460

4

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

संबंधित मुद्दे