2016-07-20 2 views
0

вот пример. У меня есть бар здоровья. Если у игрока есть 100% HP, у него есть бар здоровья полностью красным. Если его атакуют, часть бара здоровья красная, а остальная часть темная (поскольку он потерял несколько HP). Я сделал ROI на том месте, где находится его бар здоровья. Как бы я подсчитал процент своей жизни с помощью OpenCV?Расчет процента заполненного цвета, в частности, ROI?

+0

(количество красных пикселей/roi area) * 100? – Miki

+0

Спасибо за ввод, но как я могу получить только красные пиксели? Я знаю, что могу вычислить все пиксели с помощью mat.total(), но не знаю, как это сделать только для красных пикселей? Должен ли я использовать какую-то сделку? – Jacob

+0

Да, вы можете использовать 'inRange', а затем' countNonZero'. См. [Здесь] (http://stackoverflow.com/a/32523532/5008845), чтобы узнать, как начать – Miki

ответ

0

Вот окончательное решение, которое я получил. Благодаря Miki

Mat testBar = src(Rec_UserBarHP); 
Mat testBarHSV; 

cvtColor(testBar, testBarHSV, COLOR_BGR2HSV); 

Mat mask1; 
inRange(testBarHSV, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1); 
Mat mask = mask1; 

int TotalPixels = testBarHSV.rows * testBarHSV.cols; 
float ZeroPixels = TotalPixels - countNonZero(testBarHSV); 

ostringstream str; 
str << "Number of red pixels:" << ZeroPixels; 
putText(src, str.str(), 
    Point(5, 5), 
    FONT_HERSHEY_COMPLEX_SMALL, 
    1.0, 
    Scalar(255, 255, 255), 
    1, 
    CV_AA); 
Смежные вопросы