• Qt使用OpenCv


    环境配置学习视频来源:https://haokan.baidu.com/author/1706884117046568

    代码编写复制来源:QT+OpenCV从零打造美颜软件 | 图像处理入门教程_哔哩哔哩_bilibili

    电脑环境:Windows11家庭中文版+Qt5.12.12 +VS2015+可以正常开发Qt Widgets Application项目

    OpenCv下载地址:Releases - OpenCV

    下载完成是这样的:

     

    双击进行安装:选好路径,点Extract开始安装

     安装完的样子:

     添加环境变量:

     在Qt能正常使用的情况下,在pro文件中添加外部库,库文件选:

    C:\opencv\build\x64\vc15\lib\opencv_world460d.lib

    添加完应该是这样的:

    1. # Default rules for deployment.
    2. qnx: target.path = /tmp/$${TARGET}/bin
    3. else: unix:!android: target.path = /opt/$${TARGET}/bin
    4. !isEmpty(target.path): INSTALLS += target
    5. win32:CONFIG(release, debug|release): LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world460
    6. else:win32:CONFIG(debug, debug|release): LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world460d
    7. else:unix: LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world460

    在pro文件中手动写点内容:

    1. INCLUDEPATH += C:/opencv/build/include
    2. DEPENDPATH += C:/opencv/build/include

     到此环境配置结束;

    以下是测试demo的代码,供后续参考复习

    1. #ifndef MAINWINDOW_H
    2. #define MAINWINDOW_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. using namespace cv;
    9. QT_BEGIN_NAMESPACE
    10. namespace Ui { class MainWindow; }
    11. QT_END_NAMESPACE
    12. class MainWindow : public QMainWindow
    13. {
    14. Q_OBJECT
    15. public:
    16. MainWindow(QWidget *parent = nullptr);
    17. ~MainWindow();
    18. QImage MatToImage(Mat&src);
    19. void whiteFace(Mat&m);
    20. private slots:
    21. void on_pushButton_clicked();
    22. void on_contrastSlider_valueChanged(int value);
    23. void on_brightSlider_valueChanged(int value);
    24. void on_pushButton_2_clicked();
    25. void on_pushButton_3_clicked();
    26. private:
    27. Ui::MainWindow *ui;
    28. QString m_FileName;
    29. Mat m_Mat;
    30. float m_Contrast;
    31. int m_Brightness;
    32. };
    33. #endif // MAINWINDOW_H
    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. #include <QDebug>
    4. MainWindow::MainWindow(QWidget *parent)
    5. : QMainWindow(parent)
    6. , ui(new Ui::MainWindow)
    7. {
    8. ui->setupUi(this);
    9. m_Contrast = 1;
    10. m_Brightness = 0;
    11. }
    12. MainWindow::~MainWindow()
    13. {
    14. delete ui;
    15. }
    16. QImage MainWindow::MatToImage(Mat &src)
    17. {
    18. if(src.type() == CV_8UC3){
    19. QImage image((uchar*)src.data,src.cols,src.rows,static_cast<int>(src.step),QImage::Format_RGB888);
    20. return image.rgbSwapped();
    21. }
    22. else{
    23. QImage image;
    24. return image;
    25. }
    26. }
    27. void MainWindow::whiteFace(Mat &m)
    28. {
    29. for (int i = 0;i<m.rows ;i++ ) {
    30. for (int j =0;j<m.cols ;j++ ) {
    31. for (int k=0;k<3 ;k++ ) {
    32. m.at<Vec3b>(i,j)[k]=saturate_cast<uchar>(m_Contrast*m_Mat.at<Vec3b>(i,j)[k]+m_Brightness);
    33. }
    34. }
    35. }
    36. }
    37. void MainWindow::on_pushButton_clicked()
    38. {
    39. m_FileName = QFileDialog::getOpenFileName(this,"选择图片","","");
    40. if(m_FileName.isEmpty()){return;}
    41. m_Mat = imread(m_FileName.toStdString());
    42. QImage img = MatToImage(m_Mat);
    43. img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
    44. ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    45. QPixmap tempPixmap= QPixmap::fromImage(img);
    46. ui->label->setPixmap(tempPixmap);
    47. }
    48. void MainWindow::on_contrastSlider_valueChanged(int value)
    49. {
    50. m_Contrast = 1 + (float)value/10;
    51. Mat result(m_Mat.rows,m_Mat.cols,m_Mat.type());
    52. whiteFace(result);
    53. QImage img = MatToImage(result);
    54. img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
    55. ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    56. QPixmap tempPixmap= QPixmap::fromImage(img);
    57. ui->label_4->setPixmap(tempPixmap);
    58. }
    59. void MainWindow::on_brightSlider_valueChanged(int value)
    60. {
    61. m_Brightness = value;
    62. Mat result(m_Mat.rows,m_Mat.cols,m_Mat.type());
    63. whiteFace(result);
    64. QImage img = MatToImage(result);
    65. img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
    66. ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    67. QPixmap tempPixmap= QPixmap::fromImage(img);
    68. ui->label_4->setPixmap(tempPixmap);
    69. }
    70. void MainWindow::on_pushButton_2_clicked()
    71. {
    72. int val = 40;
    73. Mat bfMat;
    74. Mat result(m_Mat.rows,m_Mat.cols,m_Mat.type());
    75. bilateralFilter(m_Mat,bfMat,val,val*2,val/2);
    76. GaussianBlur(bfMat,result,Size(3,3),1,1);
    77. addWeighted(bfMat,1.5,result,-0.5,0,result);
    78. QImage img = MatToImage(result);
    79. img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
    80. ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    81. QPixmap tempPixmap= QPixmap::fromImage(img);
    82. ui->label_4->setPixmap(tempPixmap);
    83. }
    84. void MainWindow::on_pushButton_3_clicked()
    85. {
    86. Mat hsvMat,destFrame,result;
    87. cvtColor(m_Mat,hsvMat,COLOR_BGR2HSV);
    88. for (int i= 0;i<hsvMat.cols ;i++ ) {
    89. qDebug()<< hsvMat.at<Vec3b>(500,i)[0]<<hsvMat.at<Vec3b>(500,i)[1]<<hsvMat.at<Vec3b>(500,i)[2];
    90. }
    91. inRange(hsvMat,Scalar(10,10,50),Scalar(60,120,190),destFrame);
    92. cvtColor(destFrame,destFrame,COLOR_GRAY2BGR);
    93. bitwise_and(m_Mat,destFrame,result);
    94. QImage img = MatToImage(result);
    95. img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
    96. ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    97. QPixmap tempPixmap= QPixmap::fromImage(img);
    98. ui->label_4->setPixmap(tempPixmap);
    99. }

  • 相关阅读:
    4.3 基于注解的声明式事务和基于XML的声明式事务
    三道MySQL联合索引面试题,你能答对几道?
    【润学】计算机网络八股文英文版(3)
    【kafka】Timed out waiting for a node assignment
    这份Kubernetes学习笔记,看完直呼NB
    就想了解服务器为什么1M带宽网速却达不到1M
    Vue脚手架的使用(VCLI)
    修复img实际有正确的链接,但是不显示 (chrome 插件保存的html)--google镜像chatgpt
    如何用Java实现一个基于机器学习的情感分析系统,用于分析文本中的情感倾向
    python下拉框选择测试
  • 原文地址:https://blog.csdn.net/qq_41672557/article/details/126694220