2012-09-26 14 views
6

के बीच रूपांतरण मैं ओपनसीवी के साथ वीडियो फ्रेम पढ़ने की कोशिश कर रहा हूं, सीवी :: मैट फॉर्म में डेटा सहेज रहा हूं। तो मैं अपने दूसरे कोड का उपयोग करना चाहता हूं जो इस वीडियो फ्रेम में "इंट टाइप मैट्रिक्स" स्वीकार करता है। मुझे पता है कि "सीवीएमएटी" और "इंट टाइप मैट्रिक्स" संगत नहीं हैं। हो सकता है कि मैं ओपनसीवी से परिचित नहीं हूं, लेकिन क्या मैं "सीवीएमएटी" और "इंट मैट" के बीच किसी प्रकार का रूपांतरण कर सकता हूं, ताकि मैं कैप्चर किए गए वीडियो फ्रेम के लिए अपना कोड इस्तेमाल कर सकूं? मैं कहता हूँ "पूर्णांक चटाई", शायद यह सही नहीं है, लेकिन क्या मेरा मतलब यह है:ओपनसीवी मैट्रिक्स और इंट मैट्रिक्स

inputData = videoFrame; 

धन्यवाद:

cv::Mat videoFrame; 
int inputData[600][400]; 

मैं की तरह कुछ करना चाहते हैं।

उत्तर

6

स्मृति साझा करने का तेज़ तरीका है: कोई प्रति आवश्यक नहीं है। हालांकि, यदि आप एक मैट्रिक्स, संशोधित करने, अन्य (स्पष्ट!) संशोधित किया जाएगा

int inputData[600][400]; 
cv::Mat videoFrame(600, 400, CV_32UC1, inputData); 

कृपया ध्यान दें कि videoFrame पर आगे कोई भी OpenCV कॉल कि इस प्रकार/आकार बदलता है स्मृति का एक नया टुकड़ा आवंटित करेगा जहां परिणाम होगा संग्रहित किया जाए।

आप अलग डेटा मैट्रिक्स करना चाहते हैं, तो आप memcpy का उपयोग कर सकते -यह डेटा नकल करने का सबसे तेज़ तरीका है:

memcpy((char*)inputData, (char*)videoFrame.data, 600*400*sizeof(int)); 

इस दृष्टिकोण के साथ समस्या यह है कि यह बिल्कुल सुरक्षित नहीं है। क्या होगा यदि वीडियो फ्रेम प्रकार int int नहीं है? (शायद यह चार है)। क्या होगा यदि यह स्मृति में लगातार संग्रहीत नहीं है (हो सकता है)? ...

+0

प्रिय वासिल, आपके उत्तर के लिए बहुत बहुत धन्यवाद। आपकी सुझाई गई विधि काफी अच्छी है, लेकिन मुझे स्मृति आवंटन के साथ खेलने से डर है। जैसा आपने बताया है, यह सुरक्षित नहीं हो सकता है, और मैंने अब तक कई स्मृति समस्याओं का अनुभव किया है (इस मामले के लिए नहीं)। तो क्या कोई और समाधान हो सकता है? मुझे उम्मीद नहीं है कि स्मृति समस्याओं की वजह से मेरा कोड फिर से मर सकता है। फिर से धन्यवाद। –

+1

सुरक्षित तरीका इनपुटडेटा का उपयोग नहीं करना है। अपने एल्गोरिदम को देखें, और देखें कि आप केवल वीडियो फ्रेम का उपयोग कर सकते हैं या नहीं। डेटा डुप्लिकेट करना कभी-कभी खराब कोडिंग – Sam

+0

ठीक है, आपके सुझाव के लिए धन्यवाद। –

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