2012-10-11 22 views
7

मुझे सभी स्तंभों में अलग-अलग तत्वों की गणना करने की आवश्यकता है।ओपनसीवी मैट्रिक्स तत्वों का कॉलम योग

अब मैं उपयोग कर रहा हूँ:

मैट्रिक्स cross_corr अभिव्यक्त किया जाना चाहिए।

Mat cross_corr_summed; 
for (int i=0;i<cross_corr.cols;i++)              
    { 
     double column_sum=0; 
     for (int k=0;k<cross_corr.rows;k++) 
     { 
      column_sum +=cross_corr.at<float>(k,i);    
     } 
     cross_corr_summed.push_back(column_sum); 
    } 

समस्या यह है कि मेरे कार्यक्रम को चलाने में काफी समय लगता है। यह उन हिस्सों में से एक है जो इसका कारण बनने के लिए संदिग्ध हैं। क्या आप किसी भी संभावित तेज़ कार्यान्वयन की सलाह दे सकते हैं ???

धन्यवाद !!!

cv::reduce(cross_corr, cross_corr_summed, 0, CV_REDUCE_SUM, CV_32S); 
+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/5097416/sum-of-each-column-opencv) – Kiran

उत्तर

24

आप एक cv::reduce जरूरत

int width = cross_corr.cols; 
float* data = (float*)cross_corr.data; 
Mat cross_corr_summed; 
for (int i=0;i<cross_corr.cols;i++) 
{ 
    double column_sum=0; 
    for (int k=0;k<cross_corr.rows;k++) 
    { 
     column_sum += data[i + k*width]; 
    } 
    cross_corr_summed.push_back(column_sum); 
} 

जो अपने से अधिक तेजी से हो जाएगा .at_<float>() का उपयोग। आम तौर पर जब भी संभव हो मैं .at() के उपयोग से बचता हूं क्योंकि यह सीधे पहुंच से धीमा है।

इसके अलावा, हालांकि cv::reduce() (एंड्री द्वारा सुझाया गया) बहुत अधिक पठनीय है, मैंने पाया है कि यह कुछ मामलों में आपके कार्यान्वयन से धीमा है।

+0

http://docs.opencv.org/ 2.4/मॉड्यूल/कोर/डॉक्टर/ऑपरेशंस_ऑन_arrays.html # sum 'cv :: sum' सरल है। – mrgloom

1

क्या आप जानते हैं कि आपके डेटा निरंतर और एकल पहुंचाया है, तो आप मैट्रिक्स डेटा सीधे उपयोग कर सकते हैं:

0
Mat originalMatrix;  
Mat columnSum;  
for (int i = 0; i<originalMatrix.cols; i++)  
    columnSum.push_back(cv::sum(originalMatrix.col(i))[0]);  
[प्रत्येक स्तंभ opencv का योग] की
+1

कृपया यह बताएं कि यह क्यों काम करता है – rayryeng

+1

यह सीवी :: कम() के रूप में अच्छा नहीं है। फिर भी, मैंने लूप के एकाधिक उपयोग से बचने की कोशिश की, और .at <> का उपयोग भी किया। – user3693028

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