opencv
मूल संरचनाएँ
खोज…
परिचय
यह विषय 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
अधिक जानकारी के लिए, लिंक देखें