0
这里是一个例子。我有一个健康栏。如果玩家拥有100%HP,他的健康状况一直是红色。如果他受到攻击,部分生命条是红色的,其余部分是黑色的(因为他损失了一些HP)。我在他的健康栏的地方投资回报率。我如何使用OpenCV来计算他的生活百分比?计算填充颜色在特定ROI中的百分比?
这里是一个例子。我有一个健康栏。如果玩家拥有100%HP,他的健康状况一直是红色。如果他受到攻击,部分生命条是红色的,其余部分是黑色的(因为他损失了一些HP)。我在他的健康栏的地方投资回报率。我如何使用OpenCV来计算他的生活百分比?计算填充颜色在特定ROI中的百分比?
这是我得到的最终解决方案。感谢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);
(红色像素数/红色区域)* 100? – Miki
感谢您的输入,但如何获得仅红色像素?我知道我可以使用mat.total()计算所有像素,但不知道如何仅对红色像素执行此操作?我应该使用一些阈值吗? – Jacob
是的,你可以使用'inRange',然后'countNonZero'。请参阅[这里](http://stackoverflow.com/a/32523532/5008845)以了解如何启动 – Miki