一、下载Opencv库、编译、配置环境变量
1、1安装Qt过程不赘述。
在Opencv官网,选择包下载,建议最新

下载CMake-Gui

1、2 安装OpenCv以及Cmake-Gui(其实就是解压的过程)
opencv安装完成目录
1、3配置环境变量以及cmake进行构建
1.3.1添加一次环境变量
path路径,新建 ,路径根据自己Qt目录调整

1.3.2打开CMake-Gui.exe,桌面快捷或C:\Program Files\CMake\bin
选择两个路径,根据OPenCv安装路径调整,build为自己新建的路径

继续如下选择

Compilers:
C D:/Qt/Qt5.12.9/Tools/mingw730_64/bin/gcc.exe C++ D:/Qt/Qt5.12.9/Tools/mingw730_64/bin/g++.exe
点击Finish。

选中Advance,点击configure。
Configuring done一次之后,会有红色报错,再选中WITH_OPENGL和WITH_QT,在进行一次Configure。

再次configure done之后,再检查几个条框的Value按照如下进行更改,重新configure。

又一次done之后,还有报错,此处文件不一定相同,查询下具体错误与解决方案,调整选中项之后,重新configure,之后generate,构建完成。
1.3.3打开build完成之后的目录,D:\Programs\Opencv\opencv-build,根据自己目录调整。
在此按住shift键,同时点击鼠标右键,点击在此处打开Powershell窗口(s),进入Windows Powershell,输入
mingw32-make -j 8

make完成之后,输入
mingw32-make install

最后将D:\Programs\Opencv\opencv-build\install\x64\mingw\bin,加入环境变量,前面三个是开始添加,最后一条此处添加。

二、Qt工程导入与测试实现
2、1创建一个QWidget应用

2、2编辑pro,添加加载头文件与动态库目录,
INCLUDEPATH += D:\Programs\Opencv\opencv-build\install\include
LIBS += D:\Programs\Opencv\opencv-build\lib\libopencv_*.a

在MainWindow.h,导入头文件
#include <QMainWindow>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;

添加比对函数
void MainWindow::comparison(Mat &matSrca,Mat& matSrcb)
{
cv::Mat matSrc1,matSrc2;
CV_Assert(matSrca.channels() == 3);
CV_Assert(matSrcb.channels() == 3);
cv::resize(matSrca, matSrc1, cv::Size(357, 419), 0, 0, cv::INTER_NEAREST);
//cv::flip(matSrc1, matSrc1, 1);
cv::resize(matSrcb, matSrc2, cv::Size(2177, 3233), 0, 0, cv::INTER_LANCZOS4);
cv::Mat matDst1, matDst2;
//调整jpg图片大小
cv::resize(matSrc1, matDst1, cv::Size(8, 8), 0, 0, cv::INTER_CUBIC);
cv::resize(matSrc2, matDst2, cv::Size(8, 8), 0, 0, cv::INTER_CUBIC);
//update 20181206 for the bug cvtColor
cv::Mat temp1 = matDst1;
cv::Mat temp2 = matDst2;
cv::cvtColor(temp1 , matDst1, COLOR_BGR2GRAY);
cv::cvtColor(temp2 , matDst2, COLOR_BGR2GRAY);
int iAvg1 = 0, iAvg2 = 0;
int arr1[64], arr2[64];
for (int i = 0; i < 8; i++)
{
uchar* data1 = matDst1.ptr<uchar>(i);
uchar* data2 = matDst2.ptr<uchar>(i);
int tmp = i * 8;
for (int j = 0; j < 8; j++)
{
int tmp1 = tmp + j;
arr1[tmp1] = data1[j] / 4 * 4;
arr2[tmp1] = data2[j] / 4 * 4;
iAvg1 += arr1[tmp1];
iAvg2 += arr2[tmp1];
}
}
iAvg1 /= 64;
iAvg2 /= 64;
for (int i = 0; i < 64; i++)
{
arr1[i] = (arr1[i] >= iAvg1) ? 1 : 0;
arr2[i] = (arr2[i] >= iAvg2) ? 1 : 0;
}
int iDiffNum = 0;
//等同于计算明汉距离
for (int i = 0; i < 64; i++)
if (arr1[i] != arr2[i])
++iDiffNum;
qDebug()<<"相似度 = "<<100-iDiffNum<<endl;
}
2、3准备两张相同或存在差异的图片,按照路径添加调用
//照片相似度
Mat image=imread("C:\\Users\\Lenovo\\Desktop\\Download\\11111.jpg",IMREAD_COLOR);
Mat image2=imread("C:\\Users\\Lenovo\\Desktop\\Download\\22222.jpg",IMREAD_COLOR);
comparison(image,image2);
ok,此时完成OPenCv的库编译与Qt调用。
该文详细介绍了如何下载OpenCV库,通过CMake-Gui进行编译配置,设置环境变量,解决构建过程中的问题。接着在Qt工程中导入OpenCV,编辑pro文件添加头文件和库路径,并编写代码实现图像比较功能。
403

被折叠的 条评论
为什么被折叠?



