2016-04-13 10 views
-1

緑、茶色、黄色などの葉画像から特定の色を検出する必要があるプロジェクトがあります。 このチュートリアル(http://opencv-srf.blogspot.com.br/2010/09/object-detection-using-color-seperation.html)には、リアルタイムトラックバーを作成して最適な値を見つける方法が説明されていますが、ウェブカメラの画像が使用されています。 お元気ですか?Opencv:トラックバーを使用して色を検出するためにビデオを画像に使用するコードを変更する

ありがとうございます。

+0

コード作成サービスではありませんので、私にpingしてください。 にあなたの質問を編集して、これまでに試したこととどこにいらっしゃったのかを説明すれば、 の問題を解決することができます。 も[ask]を読んでください。 –

+0

本当にすみません。私はこの質問を別の質問の別のユーザーからの私は(http://stackoverflow.com/questions/36586924/having-difficulties-to-detect-certain-colors-using-opencv)の質問に出席し、急いで私は授業が始まる前に勉強したいと思っていたので、私は仕事に就いていました。 私はあなたのアドバイスを取ってきます。私はそのような急いで質問しませんので、私はあなたに詳細を表示することを忘れないでください。 ありがとうございます。 – Nicholas

答えて

1

ここには、トラックバーで範囲を選択してHSV画像をしきい値処理するためのコードがあります。異なる(hereに記載されているように)ビデオから、Iは形態学的操作を実行するためにmorphologyExを使用し、C++関数createTrackbarとCスタイルcvCreateTrackbarを置き換え、

注意。

コード内のコメントは明確でなければなりません。

#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

三木、どうもありがとう! これはまさに私が必要なものです。 – Nicholas

関連する問題