前言
最近在研究如何读取汽车仪表盘上的仪表数据,发现圆盘数据不是很好读取,特别是将指针与圆盘数据匹配时,所以这里想着是不是把圆盘展平,然后从矩形读取数据是不是更简单,这里用opencv实践了下,分享给大家。
1. 实现步骤
本人使用VS2015+Opencv4.5.1实现圆环展平,基本步骤如下:
- 读取彩色图像
- 转换灰度图像
- 应用霍夫圆检测并获取最大圆的圆心与半径
- 应用网上找到的圆环展平方法【链接】
2. 代码实现
#include <iostream>
#include <opencv2\core.hpp>
#include <opencv2\imgcodecs.hpp>
#include <opencv2\imgproc.hpp>
#include <opencv2\highgui.hpp>
using namespace cv;
bool FlatternCircle(const Mat& inputImg, OutputArray outputImg, const Point& center, const int nRadius, const int nRingHeight)
{
if (inputImg.empty())
return false;
//输出图像为矩形,高度为圆环高度,宽度为圆环外圆周长
outputImg.create(Size(nRadius*CV_2PI, nRingHeight), CV_8UC1);
Mat rectangle = outputImg.getMat();
int rows = rectangle.rows;
int cols = rectangle.co