2016-04-13 17 views
-1

Yeşil, kahverengi ve sarı gibi yaprak görüntülerinden belirli renkleri algılayacağım bir projem var. Bu öğreticiyi (http://opencv-srf.blogspot.com.br/2010/09/object-detection-using-color-seperation.html), bunun için en iyi değerleri bulmak için gerçek zamanlı bir iz çubuğu oluşturmayı açıklayan bir yöntem buldum, ancak bir web kamerasındaki görüntüleri kullanıyor ve bunları resimlerle kullanmak istiyorum. Lütfen bana yardım etmeme yardım edebilir misiniz?Opencv: İzleri kullanarak renk algılaması için bir görüntüye video kullanan bir kodun değiştirilmesi

Teşekkür ederiz.

+0

bu soru ve cevap sitesi değil, bir kod yazma hizmeti olduğuna dikkat edin. Sorunuzu 'a [değiştirdiyseniz], şu ana kadar ne denediğinizi ve nerede takılı kaldığınızı açıklarsanız, , o zaman belirli sorunlarda size yardımcı olmaya çalışabiliriz. numaralı telefonu da okumalısınız [ask]. –

+0

Gerçekten üzgünüm. Başka bir sorudan (http://stackoverflow.com/questions/36586924/having-difficulties-to-detect-certain-colors-using-opencv) sorduğum başka bir kullanıcıdan gelen bir talebe katılarak bu soruyu sorduğumda Benim işimdeydim çünkü derslerim başlamadan önce daha sonra okumak istedim ve çalışmayan yazdığım kodu göstermeyi unuttum. Tavsiyenizi alacağım ve bu kadar aceleyle soru sormayacağım, bu yüzden size daha fazla ayrıntı göstermeyi unutmayın. Teşekkür ederiz. – Nicholas

cevap

1

Burada, bir HSV görüntüsünün eşik değerlerinin izlenmesi, iz çubukları ile aralıkların seçilmesi için kod bulunmaktadır. farklı (here tarif edildiği gibi) bir video, bir morfolojik işlemleri gerçekleştirmek için morphologyEx kullanılır, ve C++ fonksiyonu createTrackbar C tarzı cvCreateTrackbar yerini

not edin.

Koddaki yorumlar temiz olmalıdır. şey net değilse beni ping edin:

#include <opencv2/opencv.hpp> 
#include <iostream> 
using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    // Load BGR image 
    Mat3b bgr = imread("path_to_image"); 
    if (bgr.empty()) 
    { 
     cout << "Cannot open the image" << endl; 
     return -1; 
    } 

    // Transform to HSV 
    Mat3b hsv; 
    cvtColor(bgr, hsv, COLOR_BGR2HSV); 

    // Create a window called "Control" 
    namedWindow("Control", CV_WINDOW_AUTOSIZE); 

    // Set starting values for ranges 
    int iLowH = 0; 
    int iHighH = 179; 

    int iLowS = 0; 
    int iHighS = 255; 

    int iLowV = 0; 
    int iHighV = 255; 

    //Create trackbars in "Control" window 
    createTrackbar("LowH", "Control", &iLowH, 179); //Hue (0 - 179) 
    createTrackbar("HighH", "Control", &iHighH, 179); 

    createTrackbar("LowS", "Control", &iLowS, 255); //Saturation (0 - 255) 
    createTrackbar("HighS", "Control", &iHighS, 255); 

    createTrackbar("LowV", "Control", &iLowV, 255); //Value (0 - 255) 
    createTrackbar("HighV", "Control", &iHighV, 255); 

    //Show the original image 
    imshow("Original", bgr); 

    // Create kernel for morphological operation 
    Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5)); 

    // Infinte loop, until user press "esc" 
    while (true) 
    { 
     Mat mask; 
     inRange(hsv, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), mask); //Threshold the image 

     //morphological opening (remove small objects from the foreground) 
     morphologyEx(mask, mask, MORPH_OPEN, kernel); 

     //morphological closing (fill small holes in the foreground) 
     morphologyEx(mask, mask, MORPH_CLOSE, kernel); 

     //Show the thresholded image 
     imshow("Thresholded Image", mask); 

     if (waitKey(30) == 27) //wait for 'esc' key press for 30ms. If 'esc' key is pressed, break loop 
     { 
      cout << "esc key is pressed by user" << endl; 
      break; 
     } 
    } 
    return 0; 
} 
+0

Miki, çok teşekkür ederim! Tam olarak ihtiyacım olan şey bu. – Nicholas

İlgili konular