2016-07-20 63 views
0

這裏是一個例子。我有一個健康欄。如果玩家擁有100%HP,他的健康狀況一直是紅色。如果他受到攻擊,部分生命條是紅色的,其餘部分是黑色的(因爲他損失了一些HP)。我在他的健康欄的地方投資回報率。我如何使用OpenCV來計算他的生活百分比?計算填充顏色在特定ROI中的百分比?

+0

(紅色像素數/紅色區域)* 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);