• QT5 MSVC2017 64bit配置OpenCV4.5无需编译与示范程序


    环境:Windows 10 64位

    Opencv版本:4.5

    QT:5.14

    QT5 MSVC2017配置OpenCV

    版本参考:

    opencv msvc c++对应版本

    1.安装MSVC2017(vs2017)

    打开Visual Studio Installer,点击修改

     选择vs2017生成工具:

    2.下载OpenCV4.5并解压

    opencv4.5版本

    3.解压opencv-4.5.4-vc14_vc15.exe

    vc15 = Visual Studio 2017

    OpenCV4.5 支持 VS2017,VS2019(x64)

    OpenCV4.6 支持 VS2017,VS2019(x64)

    3.QT安装与配置:

    Qt 下载
    国内镜像网站
    这里给大家推荐几个国内著名的 Qt 镜像网站,主要是各个高校的:

    中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
    清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
    北京理工大学:http://mirror.bit.edu.cn/qtproject/
    中国互联网络信息中心:https://mirrors.cnnic.cn/qt/

    Qt6 官网QtCreator 下载与安装方法win10_qt6下载-CSDN博客

    4.环境变量配置

    一、配置QT安装的路径

    二、配置Opencv的解压的位置

    5.打开QT Creator新建项目

     

    选择qmake

     选择MSVC2017 64bit

    点击完成

     

    5.双击打开pro文件

    编辑区域右键选择添加库

     

    添加库文件路径后:

    pro文件已添加路径:

     示范代码:

    1. 这个函数是显示原图,值得注意的是,在转化83通道的图像时,OpenCV和QImage使用的红蓝通道是相反的,需要使用rgbSwapped方法互换一下
    2. void MainWindow::on_pushButton_read_clicked()
    3. {
    4. std::string str3 = file_read(i);
    5. cv::Mat srcimage = cv::imread(str3);
    6. /* -------------------------------------------------------- */
    7. // cv::Mat srcimage=cv::imread("../MainWindow/2.jpg");
    8. //cv::imshow("原始图片",src);R
    9. //Mat转QImage 像素 oldlabel放置原图
    10. QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
    11. QImage imag =disimage.rgbSwapped();//将红蓝通道对换
    12. // disimage = imag.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatioByExpanding);
    13. disimage = imag.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    14. ui->label->setPixmap(QPixmap::fromImage(disimage));
    15. }
    16. /*
    17. * ---------------------------
    18. opencv_t1.exe - 系统错误
    19. ---------------------------
    20. 由于找不到 opencv_world454d.dll,无法继续执行代码。重新安装程序可能会解决此问题。
    21. ---------------------------
    22. 确定
    23. ---------------------------
    24. https://www.cnblogs.com/txwtech/p/17844109.html ,解决方法
    25. *
    26. * */
    27. std::string MainWindow::file_read(int &i)
    28. {
    29. /* 可以读取绝对路径下的第一张图片 */
    30. //获取应用程序可执行文件的文件路径:
    31. //QDir::currentPath();
    32. //获取当前工程目录
    33. QDir dir(path);
    34. QStringList filename ;
    35. filename << "*.png" << "*.jpg";//可叠加,可使用通配符筛选
    36. QStringList results;
    37. results = dir.entryList(filename,QDir::Files | QDir::Readable,QDir::Name);
    38. //增加一个判定
    39. int a=results.size();
    40. //qDebug()<<a;打印出来有几张图片
    41. qDebug()<<"i"<<i;
    42. if(i+1>a)
    43. {
    44. QWidget *parent=new QWidget;
    45. // QMessageBox::information(parent,tr("aa"),tr("aa"),tr("aa"),tr("aa"));
    46. // QMessageBox::information(this,tr("提示"),tr("最后一张,将返回第一张"),tr("确定"),tr("取消"));
    47. QMessageBox::information(parent,tr("提示"),tr(" 最后一将返回第一张 "),tr("确定"),tr("取消"));
    48. // QMessageBox::information(parent,tr("aa"),tr(" 最后一将返回第一张 "));
    49. qDebug()<<i;
    50. i--;//回到上一张
    51. i=0;
    52. }
    53. //qDebug()<<results;
    54. //results里就是获取的所有文件名了,这里的qdebug是将运行的路径进行输出
    55. QString st=results.at(i);
    56. QString rt=path;
    57. qDebug()<<rt+st;
    58. std::string str1=rt.toStdString();
    59. std::string str2 = st.toStdString();
    60. std::string str3=str1+str2;
    61. return str3;
    62. }
    63. void MainWindow::on_pushButton_next_pic_clicked()
    64. {
    65. i++;
    66. file_read(i);
    67. on_pushButton_read_clicked();
    68. on_pushButton_to_gray_clicked();
    69. }
    70. void MainWindow::on_pushButton_previous_pic_clicked()
    71. {
    72. i--;
    73. if(i<=0)
    74. {
    75. i=0;
    76. }
    77. file_read(i);
    78. on_pushButton_read_clicked();
    79. on_pushButton_to_gray_clicked();
    80. }
    81. 增加一个警告框用来提示是否存在文件夹,如果没有就创建
    82. void MainWindow::on_pushButton_create_folder_clicked()
    83. {
    84. QDir *temp = new QDir;
    85. bool exist = temp->exists(path);
    86. if(exist)
    87. {// QMessageBox::warning(this,"创建文件夹","文件夹已经存在!");//会显示中文乱码
    88. QMessageBox::information(this,tr("提示"),tr("创建成功"),tr("确定"),tr("取消"));
    89. }
    90. else
    91. {
    92. bool ok = temp->mkdir(path);
    93. if(ok)
    94. {
    95. ;
    96. // QMessageBox::information(this,u8"提示",u8"创建失败!",u8"确定",u8"取消");
    97. }
    98. // QMessageBox::warning(this,"创建文件夹","文件夹创建成功!");
    99. }
    100. }
    101. void MainWindow::on_pushButton_to_gray_clicked()
    102. {
    103. std::string str3=file_read(i);
    104. cv::Mat srcimage=cv::imread(str3);
    105. //cv::imshow("原始图片",src);
    106. cv::Mat img_resize,img_Gray,img_blur;
    107. //cv::resize(srcimage, img_resize,cv::Size(), 0.5, 0.5);
    108. cvtColor(srcimage, img_Gray, cv::COLOR_BGR2GRAY);
    109. GaussianBlur(img_Gray, img_blur, cv::Size(3, 3), -1, -1);//高斯模糊化
    110. //Mat转QImage 像素 oldlabel放置原图
    111. // QImage disimage = QImage(img_blur.data,img_blur.cols,img_blur.rows,img_blur.cols*img_blur.channels(),QImage::Format_Grayscale8);
    112. //Mat转QImage 像素 oldlabel放置灰度图
    113. QImage disimage = QImage(img_blur.data,img_blur.cols,img_blur.rows,img_blur.cols*img_blur.channels(),QImage::Format_Grayscale8);
    114. ui->label_2->setPixmap(QPixmap::fromImage(disimage.scaled(ui->label_2->width(),ui->label_2->height(),Qt::KeepAspectRatio)));//,Qt::KeepAspectRatio在后面加上这个就可以保证图片不变形
    115. }

    工程源代码:

    待更新。。。

  • 相关阅读:
    axios简单使用
    数据结构详解①——诸论
    C语言描述数据结构 —— 栈和队列OJ题
    c# 字符串格式化日期时间
    unix:///var/tmp/supervisor.sock no such file
    微信小程序标题栏封装
    科技云报道:都想当中国VMware,但用户体验拉平了吗?
    如何使用CRM实现销售流程自动化?
    淘宝/天猫添加收货地址 API
    Linux ARM平台开发系列讲解(入门篇) 1.6.3 NVIDIA AGX Xavier刷机方法
  • 原文地址:https://blog.csdn.net/txwtech/article/details/134519027