2016-04-13 52 views
1

私は多くの葉の画像で3つの特定の色、緑色、黄色、茶色を検出する必要があるプロジェクトがあります。openCVを使用して特定の色を検出するのが難しい

私は例として、次の画像を使用しています:

enter image description here

異なる色を検出する目的は木が病気であるかどうかを決定することであるので、それのことができるようにすることが非常に重要です少量のピクセルであっても、緑、黄、茶色のものを正しく伝えます。

私は、次のコードを書いた:

//Load the image 
Mat img_bgr = imread("c:\\testeimagem\\theeye\\greening32.jpg", 1); 
if (img_bgr.empty()){ 
    cout << "Nenhuma imagem foi carregada..." << endl; 
    return -1; 
} 

//Display the image 
namedWindow("Original Image", WINDOW_NORMAL); 
imshow("Original Image", img_bgr); 
waitKey(0); 
destroyAllWindows; 

//Conversion to HSV 
Mat img_hsv; 
cvtColor(img_bgr, img_hsv, CV_BGR2HSV_FULL); 

//Extracting colors - HSV 
Mat cores_divididas, green, yellow, brown; 

//Yellow 
inRange(img_hsv, Scalar(28, 240, 240), Scalar(33, 255, 255), yellow); 
imwrite("c:\\testeimagem\\theeye\\yellow.jpg", yellow); 

//Green 
inRange(img_hsv, Scalar(38, 100, 100), Scalar(70, 190, 190), green); 
imwrite("c:\\testeimagem\\theeye\\green.jpg", green); 

//Brown 
inRange(img_hsv, Scalar(10, 90, 90), Scalar(20, 175, 175), brown); 
imwrite("c:\\testeimagem\\theeye\\brown.jpg", brown); 

namedWindow("Yellow", WINDOW_NORMAL); 
imshow("Yellow", yellow); 

namedWindow("Green", WINDOW_NORMAL); 
imshow("Green", green); 

namedWindow("Brown", WINDOW_NORMAL); 
imshow("Brown", brown); 

waitKey(0); 
destroyAllWindows; 

return 0; 

あなたたちはこのコードをコンパイルする場合は、あなたが緑の色が正しく検出されず、他の色が全く検出されないことがわかります。

参考値の目安として、I used this trackbarです。

答えて

0

は、これらの範囲を試してみてください:あなたの葉のイメージで

//Yellow 
inRange(img_hsv, Scalar(28, 0, 0), Scalar(33, 255, 255), yellow); 
imwrite("yellow.jpg", yellow); 

//Green 
inRange(img_hsv, Scalar(38, 0, 0), Scalar(70, 255, 255), green); 
imwrite("green.jpg", green); 

//Brown 
inRange(img_hsv, Scalar(10, 0, 0), Scalar(20, 255, 255), brown); 
imwrite("brown.jpg", brown); 

まったく茶色の色素が存在しないようです。私はこの葉でそれを試しました、Brownish leaf 、それは大丈夫です。

私がこれらの範囲を試した理由は、真の色情報が色相量に埋め込まれている(私が間違っていれば正しい)ということです。

OBs:既に述べたように、CV_BGR2HSVで行ってください。

+0

アドリアーノ、私は昨日あなたのコードを最初にチェックしたので、とてもうまくテストできませんでしたが、後でクラスの中で、もっと時間とパラメータを使って見ることができました。私は他のポストでコメントした葉、それは他の写真と本当にうまくいくように思えます、そして、私はこれよりも色を表現するためのより良い方法を見つけることができません。私は低い値を最小値、値は最大値です。ありがとう、あなたは私をたくさん助けました!もし私がより良い方法を見つけ出すことができれば、私はここに戻り、皆さんと分かち合うでしょう。 – Nicholas

0

元のイメージの色空間を変換するときは、CV_BGR2HSV_FULLではなくCV_BGR2HSVを使用してください。あなたが参照したリンクは、色相が異なる値の範囲を持つCV_BGR2HSVに基づく参照値を提供します。そのため、おそらく少なくとも1つの要因が原因です。

関連する問題