前言
我们在以往的UI自动化测试中,可以通过获取页面元素进行封装组合成一系列模拟真人的操作,来完成UI方面的自动化测试,但是在地图业务测试中,这种方式是无法完成的,地图是无法通过普通元素定位手段是无法获取元素的,比如完成对比新老版本路径规划的准确性、与竞品比较路线的成熟度,但通过图像识别也是一个不错的思路,今天我们介绍一下利用图像识别的方式,在地图测试做一些应用。下面我们介绍今天的主角——OpenCV
OpenCV(Open Source Computer Vision Library)是一个使用 C/C++ 开发的开源的跨平台的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法,同时也提供了 Python、Java、MATLAB 等其他语言的接口。OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。
一、安装和工程搭建不多介绍,注意安装以下模块和工具
GTK+ 2.x 或者更高的版本;
GCC 编译器;
cmake 构建工具;
libtbb(英特尔线程构建模块)
Python3
二、图像写入和读取
图像处理依赖于得到一幅图像、视频,并通过应用信号处理技术的“播放”来得到预期的结果,我们写入两张路线规划图片。
OpenCV 支持的主要图像格式有:
Windowsbitmaps(*.bmp、*dib);
Portableimage formats(*.pbm、*.pgm、*.ppm);
Sunrasters(*.sr、*.ras);
需要辅助库的格式有:
JPEG(*.jpeg、*.jpg、*.jpe);
JPEG 2000(*.jp2);
Portable Network Graphics(*.png);
TIFF(*.tiff、*.tif);
WebP(*.webp);
三、相似度对比方法
OpenCV相似度对比有几种方法:
1.直方图对比法
2. 图像模板匹配
3. PSNR峰值信噪比
4.SSIM(structural similarity)结构相似性
5、感知哈希算法
四、实现步骤:
1)两个版本的地图做起止点路线规划,截图保存,从本地读取两张图像
bool compareLineByHist(Mat img,Mat orgImg){ Mat tmpImg; resize(img, tmpImg, Size(orgImg.cols, orgImg.rows)); imshow("Img1", img); imshow("tmpImg", tmpImg); imshow("orgImg", orgImg);
2)将两张图像进行H色调、S饱和度、V亮度格式转换
cvtColor(tmpImg, tmpImg, COLOR_BGR2HSV); cvtColor(orgImg, orgImg, COLOR_BGR2HSV);
3)构建图像的直方图模型,并进行直方图归一化
int hBins = 256, sBins = 256; int histSize[] = { hBins,sBins };
float hRanges[] = { 0,180 };
4)比较两张图片的直方图模型,计算图片的直方图相似度
float hRanges[] = { 0,180 };
float sRanges[] = { 0,255 };
const float* ranges[] = { hRanges,sRanges };
int channels[] = { 0,1 };//二维直方图
MatND hist1, hist2;
calcHist(&tmpImg, 1, channels, Mat(), hist1,2,histSize, ranges, true, false); normalize(hist1, hist1, 0, 1, NORM_MINMAX, -1, Mat()); calcHist(&orgImg, 1, channels, Mat(), hist2, 2, histSize, ranges, true, false); normalize(hist2, hist2, 0, 1, NORM_MINMAX, -1, Mat()); double similarityValue = compareHist(hist1, hist2, CV_COMP_CORREL); cout << "相似度:" << similarityValue << endl; if (similarityValue >= 0.85) 0.85为阈值
搜狗测试微信号:Qa_xiaoming