double getAngle(CvPoint cen, CvPoint first, CvPoint second)
{
double ma_x = first.x - cen.x;
double ma_y = first.y - cen.y;
double mb_x = second.x - cen.x;
double mb_y = second.y - cen.y;
double v1 = (ma_x*mb_x) + (ma_y*mb_y);
double ma_val = sqrt(ma_x*ma_x + ma_y*ma_y);
double mb_val = sqrt(mb_x*mb_x + mb_y*mb_y);
double cosM = v1 / (ma_val*mb_val);
double angleAMB = acos(cosM) * 180 / CV_PI;
return angleAMB;
}
double getMeterValue(CvPoint pointerCenter, CvPoint pointerEnd)
{
double angle = getAngle(pointerCenter, CvPoint(pointerCenter.x, 0), pointerEnd);
//double angleStart = 45, angleEnd = 315;
double angleStart = 30, angleEnd = 330;
double maxValue = 100;
cout << "meterAngle:" << angle << endl;
if (pointerEnd.x<pointerCenter.x)
{
angle = 180 - angle;
}
else {
angle = 180 + angle;
}
double meterValue = (abs(angle - angleStart) / (angleEnd - angleStart))*maxValue;
cout << "meterAngle:" << angle << endl;
//cout << "meterValue:" << meterValue << " Mpa" << endl;
cout << "meterValue:" << meterValue << " ℃ " << endl;
return meterValue;
}
int main()
{
//----对仪表读数进行识别处理---------------------------------------------------------
Mat srcImage = imread("000003.jpg");
if (srcImage.empty())