2016-07-20 66 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);