2016-04-13 14 views
1

Birçok yaprak resminde 3 özel rengi saptamam gereken bir projem var: Yeşil, Sarı ve Kahverengi.OpenCV kullanarak belirli renkleri tespit etmekte zorluk çekiyorum

Ben bir örnek olarak aşağıdaki görüntüyü kullanıyorum:

enter image description here

objektif farklı renkler tespit edilmektedir ağaç hasta olup olmadığını o edebilmek için gerçekten önemli, bu yüzden belirlemek için Küçük miktarlarda piksellerde bile neyin yeşil, sarı ve kahverengi olduğunu doğru şekilde söyleyin. Siz bu kodu derlemek Eğer

//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; 

, yeşil renk düzgün algılanmıyor ve diğer renkler ise tespit edilemez olduğunu fark edecektir:

Aşağıdaki kodu yazdım.

Referans değerler için kılavuz olarak, I used this trackbar.

cevap

0

bu aralıklarını deneyin: En yaprak görüntüsünde

//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); 

o hiç kahverengi pigmenti yoktur görünüyor. Bu yaprak, Brownish leaf ile test ettim ve iyi görünüyor.

Bu aralıkları denememin nedeni, gerçek renk bilgilerinin (yanlış olduğumu doğru olarak) Ton miktarına gömülü olmasının gerisinde kalıyor.

Dikkat: Daha önce bahsedildiği gibi CV_BGR2HSV ile devam edin.

+0

Adriano, i kodunuzu ilk kez kontrol ettiğimde, işimi yapıyordum, bu yüzden çok iyi test edemedim, ancak daha sonra sınıflar boyunca daha fazla zaman ve bu parametrelerle bakabiliyordum. diğer yazıya yorumladığım yaprak, diğer resimlerle çok iyi çalışıyor gibi görünüyor ve renkleri temsil etmenin daha iyi bir yolunu bulamıyorum. Düşük değerleri minimum ve daha yüksek olarak ayarlamayı düşünmedim. Maksimum değerler. Çok teşekkür ederim, bana çok yardımcı oldun! Daha iyi bir yol bulabilirsem, buraya geri dönüp sizinle paylaşırım. – Nicholas

0

Orijinal görüntünün renk alanını dönüştürdüğünüzde, CV_BGR2HSV_FULL yerine CV_BGR2HSV kullanmayı deneyin. Başvurduğunuz bağlantı, tonun farklı bir değerler aralığına sahip olduğu CV_BGR2HSV'ye dayalı referans değerleri sağlar, bu nedenle sorunlarınıza neden olabilecek en az bir faktördür.