OpenCV 指针仪表盘参数读取(五) 参数计算

在得到圆心信息和直线信息后,需要通过这些信息把他们转化为角度信息,在转化为我们需要的参数信息,这里需要用到math.h头文件中的反切函数,即

atan2(x, y)

这个函数是以x,y相对于0,0点的位置在不同象限上进行计算的,输出范围为-pi,pi,因此需要对它的输出值进行一定的转化,在OpenCV中,图像坐标系和常用的坐标系如下图:

故除第三象限,其他象限都为(3 * pi / 2) * ( - 原角度),第三象限为(pi / 2) * ( - 原角度),角度纠正代码如下:

float CalculateValue() {
	
	float angle = 0;
	float x, y;

	x = cho_l[2] - cho_l[0];
	y = -(cho_l[3] - cho_l[1]);

	// Angle Correction

	if (cho_l[2] > circle_center.x)
		if (cho_l[3] > circle_center.y)
			// first quadrant
			angle = ((3 * 3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
		else
			// second quadrant
			angle = ((3 * 3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
	else
		if (cho_l[3] < circle_center.y)
			// third quadrant
			angle = ((-3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
		else
			// fourth quadrant
			angle = ((3 * 3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;

	return angle;
}

输出结果图:

欢迎评论文章,给予宝贵建议,工程提供在github下载学习,请关注作者,共同学习交流。

OpenCV是一个强大的计算机视觉库,可以用于图像处理和分析。要使用指针仪表盘读取功能,需要以下步骤: 1. 加载图像:使用OpenCV函数读取仪表盘图像并将其存储为Mat对象。 2. 预处理图像:使用图像处理技术,如灰度转换、平滑和二值化,以便更好地识别仪表盘指针。 3. 检测指针:使用霍夫变换检测仪表盘指针。这将返回指针的位置和角度。 4. 计算度数:根据指针的位置和角度计算指针所指示的度数。 下面是一个使用OpenCV进行指针仪表盘读取的示例代码: ```python import cv2 import math # 读取图像 img = cv2.imread('dashboard.jpg') # 灰度转换 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 平滑处理 blur = cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 检测圆形轮廓 circles = cv2.HoughCircles(thresh, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0) # 获取圆形轮廓 if circles is not None: circles = np.round(circles[0, :]).astype('int') for (x, y, r) in circles: # 绘制圆形轮廓 cv2.circle(img, (x, y), r, (0, 255, 0), 2) # 获取指针位置 pointer_x = int(x + r * math.cos(math.radians(-90))) pointer_y = int(y - r * math.sin(math.radians(-90))) # 绘制指针 cv2.line(img, (x, y), (pointer_x, pointer_y), (0, 0, 255), 2) # 计算度数 degree = int((math.atan2(y - pointer_y, pointer_x - x) * 180 / math.pi) + 180) print('degree:', degree) cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,我们首先读取指针仪表盘的图像,然后使用OpenCV函数对其进行了预处理和检测。最后,我们计算指针所指示的度数,并将其打印出来。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值