खोज…


परिचय

यह विषय OpenCV में बुनियादी संरचनाओं को शामिल करता है। इस विषय में जिन संरचनाओं पर चर्चा की जाएगी, वे हैं- DataType , Point , Vec , Size , Rect , Scalar , Ptr और Mat

डाटा प्रकार

ओपनसीवी में आदिम प्रकार unsigned char, bool, signed char, unsigned short, signed short, int, float, double । OpenCV में किसी भी डेटा प्रकार को CV_<bit-depth>{U|S|F}C(<number_of_channels>) रूप में परिभाषित किया जाता है, जहाँ U: unsigned , S:signed और F:floating point

उदाहरण के लिए, CV_32FC2 एक 32-बिट, फ्लोटिंग-पॉइंट और 2-चैनल संरचना है। और बुनियादी, एक चैनल प्रकार की परिभाषा है

#define CV_8U   0
#define CV_8S   1
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6
#define CV_USRTYPE1 7

निम्न परिभाषा से उच्च चैनल के साथ अन्य प्रकार का उत्पादन किया जाता है:

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))

इन डेटाटिप्स का उपयोग करके अन्य संरचनाएं बनाई जा सकती हैं।

चटाई

Mat (मैट्रिक्स) एक एन-डायमेंशनल ऐरे है जिसका उपयोग विभिन्न प्रकार के डेटा को स्टोर करने के लिए किया जा सकता है, जैसे RGB, HSV या ग्रेस्केल इमेज, असली या जटिल मान वाले वैक्टर, अन्य मैट्रिसेस आदि।

एक Mat में निम्नलिखित जानकारी होती है: width , height , type , channels , data , flags , datastart , dataend इत्यादि।

इसकी कई विधियाँ हैं, उनमें से कुछ हैं: create , copyTo , convertTo , isContinious आदि।

Mat वैरिएबल बनाने के कई तरीके हैं। विचार करें कि मैं 100 पंक्तियों, 200 स्तंभों के साथ एक मैट्रिक्स बनाना चाहता हूं, CV_32FC3 टाइप करें:

int R = 100, C = 200;
Mat m1; m1.create(R,C,CV_32FC3);//creates empty matrix
Mat m2(cv::Size(R, C), CV_32FC3); // creates a matrix with R rows, C columns with data type T where R and C are integers, 
Mat m3(R,C,CV_32FC3); // same as m2

प्रारंभिक चटाई:

Mat m1 = Mat::zeros(R,C,CV_32FC3); // This initialized to zeros, you can use one, eye or cv::randn etc.
Mat m2(R,C,CV_32FC3);
for (int i = 0; i < m2.rows; i++)
    for (int j = 0; j < m2.cols; j++)
        for (int k = 0; k < m2.channels(); k++)
            m2.at<Vec3f>(i,j)[k] = 0;
//Note that, because m2 is a float type and has 3 channels, we used Vec3f, for more info see Vec 

Mat m3(3, out, CV_32FC1, cv::Scalar(0));

vec

Vec (वेक्टर) संख्यात्मक मानों के लिए एक टेम्प्लेट क्लास है। c++ vector एस के विपरीत, यह आम तौर पर लघु वैक्टर (केवल कुछ तत्व) संग्रहीत करता है।

Vec को परिभाषित करने का तरीका इस प्रकार है:

 typedef Vec<type, channels> Vec< channels>< one char for the type>;

जहां प्रकार एक प्रकार का है uchar, short, int, float, double और प्रत्येक प्रकार के वर्ण क्रमशः b, s, i, f, d हैं।

उदाहरण के लिए, Vec3b 3 Vec3b 3 चैनलों के एक अहस्ताक्षरित चार वेक्टर को इंगित करता है। आरजीबी छवि में प्रत्येक सूचकांक इस प्रारूप में है।

Mat rgb = imread('path/to/file', CV_LOAD_IMAGE_COLOR);  
cout << rgb.at<Vec3b>(0,0); //The output is [r g b] values as ASCII character.
// To print integer values of RED value
cout << (int)rgb.at<Vec3b>(0,0)[0]; //The output will be an integer in [0, 255].

Vec वर्ग में निम्नलिखित ऑपरेटरों को परिभाषित किया गया है

v1 = v2 + v3
v1 = v2 - v3
v1 = v2 * scale
v1 = scale * v2
v1 = -v2
v1 += v2 and other augmenting operations
v1 == v2, v1 != v2

अधिक जानकारी के लिए, लिंक देखें



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow