विशेष रूप से सूर्य की दूसरी सवाल का जवाब करने के लिए:
THB, OpenCV पर दस्तावेज़ीकरण सबसे अच्छा नहीं है। यहां नवीनतम प्रकार का लिंक: सीवी :: मैट http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat सी प्रकार की तरह नए प्रकार के आधुनिक सी ++ हैं।
यहाँ
एक समान विषय के साथ दो और OpenCV मंच जवाब: http://answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/ और http://www.answers.opencv.org/question/13437/difference-between-cvmat-cvmat-cvmat-and-mat/
विशेष रूप से रूपांतरण समस्या के लिए
(juanchopanza उल्लेख किया):
cv::Mat mat = cv::Mat(10, 10, CV_32FC1); //CV_32FC1 equals float
//(reads 32bit floating-point 1 channel)
CvMat cvMat = mat;
या साथ
using namespace cv; //this should be in the beginning where you include
Mat mat = Mat(10, 10, CV_32FC1);
CvMat cvMat = mat;
नोट: आमतौर पर आप शायद CvMat*
के साथ काम करेंगे - लेकिन आपको सोचना चाहिए नए प्रकारों को पूरी तरह से स्विच करने के बारे में। के रूप में CvMat ढेर पर आयोजित किया जाता है तो
CvMat* A = cvCreateMat(10, 10, CV_16SC1);
//Feed A with data
CvMat* B = cvCreateMat(10, 10, CV_32FC1);
for(int i=0; i<10; ++i)
for(int i=0; i<10; ++i)
CV_MAT_ELEM(*A, float, i, j) = (float) cvmGet(B, i, j);
//Don't forget this unless you want to produce a memory leak.
cvReleaseMat(&A);
cvReleaseMat(&B);
पहले दो उदाहरण (सूचक) के बिना इस तरह ठीक हैं: फ्लोट करने के लिए
CvMat* A = cvCreateMat(10, 10, CV_32F); //guess this works fine with no channels too
बदलने पूर्णांक: उदाहरण (मेरी दूसरी कड़ी से लिया गया) । cvCreateMat(...)
स्मृति को आवंटित करता है जिसे आपको बाद में मुक्त करना होगा। cv::Mat
का उपयोग करने का एक अन्य कारण।
@ धन्यवाद juanchopanza, क्या आप उपरोक्त परिचालन से संबंधित लिंक प्रदान कर सकते हैं। और मैं अपने डेटा प्रकारों को सीवीमैट में कैसे परिवर्तित कर सकता हूं। मेरे पास सीवीमैट में डेटा पूर्णांक है, अब मुझे इसे फ्लोट करने के लिए बदलना है, मैं यह कैसे कर सकता हूं? – surya