私は多くの葉の画像で3つの特定の色、緑色、黄色、茶色を検出する必要があるプロジェクトがあります。openCVを使用して特定の色を検出するのが難しい
私は例として、次の画像を使用しています:
異なる色を検出する目的は木が病気であるかどうかを決定することであるので、それのことができるようにすることが非常に重要です少量のピクセルであっても、緑、黄、茶色のものを正しく伝えます。
私は、次のコードを書いた:
//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です。
アドリアーノ、私は昨日あなたのコードを最初にチェックしたので、とてもうまくテストできませんでしたが、後でクラスの中で、もっと時間とパラメータを使って見ることができました。私は他のポストでコメントした葉、それは他の写真と本当にうまくいくように思えます、そして、私はこれよりも色を表現するためのより良い方法を見つけることができません。私は低い値を最小値、値は最大値です。ありがとう、あなたは私をたくさん助けました!もし私がより良い方法を見つけ出すことができれば、私はここに戻り、皆さんと分かち合うでしょう。 – Nicholas