2011-09-04 8 views
5

ओपनसीवी 2.3 के लिए नई एपीआई का उपयोग करके, मुझे एक लूप के अंदर एक मैट सरणी (या छवि कहें) में मान निर्दिष्ट करने में समस्या हो रही है। यहां कोड स्निपेट है जिसका मैं उपयोग कर रहा हूं;ओपनसीवी 2.3 में मैट सरणी को मान निर्दिष्ट करने में समस्या - सरल

int paddedHeight = 256 + 2*padSize; 
    int paddedWidth = 256 + 2*padSize; 

    int n = 266; // padded height or width 

    cv::Mat fx = cv::Mat(paddedHeight,paddedWidth,CV_64FC1); 
    cv::Mat fy = cv::Mat(paddedHeight,paddedWidth,CV_64FC1);   
    float value = -n/2.0f; 

    for(int i=0;i<n;i++) 
    { 
     for(int j=0;j<n;j++) 
      fx.at<cv::Vec2d>(i,j) = value++;      

     value = -n/2.0f; 
    } 

    meshElement = -n/2.0f; 

    for(int i=0;i<n;i++) 
    { 
     for(int j=0;j<n;j++) 
      fy.at<cv::Vec2d>(i,j) = value; 
     value++; 
    } 

अब पहली पाश में जैसे ही j = 133 के रूप में, मैं एक अपवाद जो छवि की गहराई से संबंधित प्रतीत हो रहा है, मैं यह पता लगाने नहीं कर सकते मैं गलत यहाँ क्या कर रहा हूँ मिलता है।

कृपया सलाह दें! धन्यवाद! Error is here

उत्तर

7

आप (.at<cv::Vec2d>() का प्रयोग करके) 2-घटक डबल वेक्टर के रूप में डेटा तक पहुंच रहे हैं, लेकिन आप मैट्रिक्स बनाया (CV_64FC1 का प्रयोग करके) केवल 1 घटक युगल को रोकने के लिए। या तो प्रति तत्व दो घटक (CV_64FC2 के साथ) के लिए मैट्रिक्स बनाएं या .at<double>() का उपयोग करके, अपने कोड के लिए अधिक उचित लगता है, मानों को सरल युगल के रूप में एक्सेस करें। यह वास्तव में जे = 133 पर विस्फोट करता है क्योंकि यह आपकी छवि का आधा आकार है और जब 2-घटक वैक्टर होते हैं तो इसमें केवल 1 होता है, यह केवल आधा चौड़ा होता है।

या शायद आप इन दो मैट्रिक्स को एक में विलय कर सकते हैं, जिसमें प्रति तत्व दो घटक होते हैं, लेकिन यह भविष्य में इन मैट्रिक्स का उपयोग करने के तरीके पर निर्भर करता है।

cv::Mat f = cv::Mat(paddedHeight,paddedWidth,CV_64FC2); 
float yValue = -n/2.0f; 

for(int i=0;i<n;i++) 
{ 
    float xValue = -n/2.0f; 

    for(int j=0;j<n;j++) 
    { 
     f.at<cv::Vec2d>(i,j)[0] = xValue++; 
     f.at<cv::Vec2d>(i,j)[1] = yValue; 
    } 

    ++yValue; 
} 

यह योजना तक पहुँचने यदि आप हमेशा दोनों मूल्यों की आवश्यकता के लिए एक बेहतर स्मृति, fx से एक और से एक का उत्पादन हो सकता है: इस मामले में आप भी दो छोरों एक साथ है और वास्तव में एक 2-घटक वेक्टर विलय कर सकते हैं सेट एक ही तत्व के लिए, fy।

+0

वह था, धन्यवाद! –