Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ का उपयोग कर ओपनसीवी में रंग कैसे ट्रैक करें?

कलर ट्रैकिंग कलर डिटेक्शन के समान है। ट्रैकिंग उद्देश्य के लिए, हमने खोजी गई वस्तु के क्षेत्र की गणना करने के लिए अतिरिक्त कुछ पंक्तियाँ जोड़ीं और फिर उस क्षेत्र की वर्तमान स्थिति को ट्रैक किया और अंत में ऑब्जेक्ट की गति का मार्ग दिखाने के लिए OpenCV के लाइन () फ़ंक्शन का उपयोग किया।

निम्न प्रोग्राम दर्शाता है कि C++ का उपयोग करके OpenCV में रंग को कैसे ट्रैक किया जाए।

उदाहरण

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
   VideoCapture video_load(0);//capturing video from default camera//
   namedWindow("Adjust");//declaring window to show the image//
   int Hue_Low= 0;//lower range of hue//
   int Hue_high = 22;//upper range of hue//
   int Sat_Low =99;//lower range of saturation//
   int Sat_high = 255;//upper range of saturation//
   int Val_Low = 0;//lower range of value//
   int Val_high = 255;//upper range of value//
   createTrackbar("LowH", "Adjust", &Hue_Low, 179);//track-bar for min hue//
   createTrackbar("HighH","Adjust", &Hue_high, 179);//track-bar for max hue//
   createTrackbar("LowS", "Adjust", &Sat_Low, 255);//track-bar for min saturation//
   createTrackbar("HighS", "Adjust", &Sat_high, 255);// track-bar for max saturation//
   createTrackbar("LowV", "Adjust", &Val_Low,255);//track-bar for min value//
   createTrackbar("HighV", "Adjust", &Val_high, 255);// track - bar for max value//  
   int Horizontal_Last = -1;//initial horizontal position//
   int vertical_Last = -1;//initial vertical position//
   Mat temp;//declaring a matrix to load frames from video stream//
   video_load.read(temp);//loading frames from video stream//
   Mat track_motion = Mat::zeros(temp.size(), CV_8UC3);//creating black matrix for detection//
   while (true) {
      Mat actual_Image;//declaring a ,atrix for actual image//
      bool temp_load= video_load.read(actual_Image);//loading frames from video to the matrix//
      Mat converted_to_HSV;//declaring a matrix to store converted image//
      cvtColor(actual_Image, converted_to_HSV, COLOR_BGR2HSV);//converting BGR image to HSV//
      Mat adjusted_frame;//declaring a matrix to detected color//
      inRange(converted_to_HSV,Scalar(Hue_Low, Sat_Low, Val_Low),
      Scalar(Hue_high, Sat_high, Val_high), adjusted_frame);//applying change of values of track-bars//        
      erode(adjusted_frame,adjusted_frame,getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));//morphological opening for removing small objects from foreground//
      dilate(adjusted_frame, adjusted_frame,getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));//morphological opening for removing small object from foreground//
      dilate(adjusted_frame, adjusted_frame,getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));//morphological closing for filling up small holes in foreground//
      erode(adjusted_frame, adjusted_frame, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));//morphological closing for filling up small holes in foreground//
      Moments detecting_object = moments(adjusted_frame);//creating an object from detected color frame//
      double vertical_moment = detecting_object.m01;//getting value of vertical position//
      double horizontal_moment = detecting_object.m10;//getting value of horizontal position//
      double tracking_area = detecting_object.m00;//getting area of the object//
      if (tracking_area > 10000){ //when area of the object is greater than 10000 pixels//
         int posX = horizontal_moment / tracking_area;//calculate the horizontal position of the object//
         int posY = vertical_moment / tracking_area;//calculate the vertical position of the object//
         if (Horizontal_Last >= 0 && vertical_Last >= 0 && posX >= 0 && posY >= 0){ //when the detected object moves//
            line(track_motion, Point(posX, posY), Point(Horizontal_Last, vertical_Last), Scalar(0, 0, 255), 2);//draw lines of red color on the path of detected object;s motion//
         }
         Horizontal_Last = posX;//getting new horizontal position//
         vertical_Last = posY;// getting new vertical position value//
      }
      imshow("Detected_Object", adjusted_frame);//showing detected object//
      actual_Image = actual_Image + track_motion;//drawing continuous line in original video frames//
      imshow("Actual",actual_Image);//showing original video//
      cout << "position of the object is:" << Horizontal_Last << "," << vertical_Last << endl;//showing tracked co-ordinated values//
      if(waitKey(30)==27){ //if esc is pressed loop will break//
         cout << "esc key is pressed by user" << endl;
         break;
      }
   }
   return 0;
}

आउटपुट

सी ++ का उपयोग कर ओपनसीवी में रंग कैसे ट्रैक करें?


सी ++ का उपयोग कर ओपनसीवी में रंग कैसे ट्रैक करें?


  1. C++ का उपयोग करके OpenCV में एकल चैनल छवि के पिक्सेल मान को कैसे पढ़ा जाए?

    डिजिटल इमेज पिक्सल से बनी होती है। OpenCV का उपयोग करके, पिक्सेल के मान को पढ़ना आसान है। हालांकि, अगर हम पिक्सेल मान प्राप्त करना चाहते हैं, तो हमें एक चैनल को अलग से संभालना होगा। यहां हम cimage नाम के मैट्रिक्स में एक इमेज लोड कर रहे हैं, और फिर यह cvtColor(cimage, img, COLOR_BGR2GRAY) का उपयोग

  1. सी ++ का उपयोग कर ओपनसीवी में रंग रिक्त स्थान कैसे परिवर्तित करें?

    रंग स्थान रंगों का प्रतिनिधित्व करने का मॉडल है। रंगों का वर्णन करने के विभिन्न तरीके हैं। उदाहरण के लिए, RGB, CYMK, HSV, ग्रेस्केल आदि। यहां, हमने imgproc.hpp नामक एक नए शीर्षलेख का उपयोग किया। यह imgproc.hpp इमेज प्रोसेसिंग का संक्षिप्त नाम है। रंग रिक्त स्थान बदलने के लिए, हमें cvtColor () . का

  1. सी ++ का उपयोग कर ओपनसीवी में किसी छवि के चैनलों की संख्या की गणना कैसे करें?

    इस विषय में, हम समझेंगे कि किसी छवि के चैनलों की संख्या का पता कैसे लगाया जाए। प्रोग्राम चलाने के बाद, कंसोल विंडो में चैनल का नंबर दिखाया जाएगा। चैनल की संख्या प्राप्त करने के लिए, हमने ओपनसीवी के एक वर्ग का उपयोग किया है जिसका नाम चैनल () है। जब हम इमेज मैट्रिक्स को चैनल () वर्ग के ऑब्जेक्ट के रू