Qt OpenCV 学习(五):答题线识别

在这里插入图片描述

1. mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <opencv2/opencv.hpp>

#include <QString>
#include <QPixmap>
#include <QDebug>
#include <QImage>
#include <QFileDialog>

using namespace cv;
using namespace std;

QT_BEGIN_NAMESPACE
namespace Ui {
    class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
   
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void showImage(Mat &sendMat);

private slots:
    void on_btnOpn_clicked();

    void on_btn_clicked();

private:
    Ui::MainWindow *ui;

    Mat srcImg;
};
#endif // MAINWINDOW_H

2. mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
   
    ui->setupUi(this);
}

MainWindow::~MainWindow() {
   
    delete ui;
}

void MainWindow::showImage(Mat &sendMat) {
   
    Mat showImg = sendMat.clone();
    if (showImg.channels() == 1) {
   
        QImage showPic = QImage((const unsigned char*)(showImg.data), showImg.cols, showImg.rows, showImg.step, QImage::Format_Indexed8);
        ui->labelShow->setPixmap(QPixmap::fromImage(showPic.scaled(ui->labelShow->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)));
    } else if (showImg.channels() == 3) {
   
        QImage showPic = QImage((const unsigned char*)(showImg.data), showImg.cols, showImg.rows, showImg.step, QImage::Format_RGB888);
        ui->labelShow->setPixmap(QPixmap::fromImage(showPic.scaled(ui->labelShow->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)));
    }
}

void MainWindow::on_btnOpn_clicked() {
   
    ui->lineEdit->clear();
    ui->labelShow->clear();
    QString filePath = QFileDialog::getOpenFileName(this, "open picture", ".", "picture (*.png *.jpg *.bmp)); All files (*.*)");
    ui->lineEdit->setText(filePath);

    srcImg = imread(filePath.toStdString());
    ui->labelShow->clear();
    showImage(srcImg);
}

void MainWindow::on_btn_clicked() {
   
    Mat grayImg, binaryImg, morhpImg;
    cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);

    threshold(grayImg, binaryImg, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(20, 1), Point(-1, -1));
    morphologyEx(binaryImg, morhpImg, MORPH_OPEN, kernel, Point(-1, -1));

    kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    dilate(morhpImg, morhpImg, kernel);

    // hough lines
    vector<Vec4i>lines;
    HoughLinesP(morhpImg, lines, 1, CV_PI / 180.0, 5, 10, 5);
    Mat resultImg = srcImg.clone();
    cvtColor(resultImg, resultImg, COLOR_BGR2RGB);

    for (size_t i = 0; i < lines.size(); i++) {
   
        Vec4i ln = lines[i];
        line(resultImg, Point(ln[0], ln[1]), Point(ln[2], ln[3]), Scalar(0, 255, 255), 2, LINE_AA);
    }

    showImage(resultImg);
}

相关推荐

  1. 记录-ORACLE

    2023-12-08 10:06:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 10:06:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 10:06:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 10:06:04       82 阅读
  4. Python语言-面向对象

    2023-12-08 10:06:04       91 阅读

热门阅读

  1. Docker创建RocketMQ和RocketMQ控制台

    2023-12-08 10:06:04       62 阅读
  2. CEPH搭建

    2023-12-08 10:06:04       57 阅读
  3. 【Docker】安装Jenkins 亲测 傻瓜式安装

    2023-12-08 10:06:04       62 阅读
  4. 苍穹外卖项目(黑马)学习笔记

    2023-12-08 10:06:04       448 阅读
  5. 面试经典150题(3-4)

    2023-12-08 10:06:04       66 阅读
  6. Linux环境变量export命令笔记231207

    2023-12-08 10:06:04       70 阅读
  7. HttpURLConnection OOM问题记录

    2023-12-08 10:06:04       70 阅读
  8. ChatGPT(INSCODE AI 创作助手自动创作的)

    2023-12-08 10:06:04       102 阅读
  9. stm32中滴答定时器与普通定时器的区别

    2023-12-08 10:06:04       63 阅读
  10. 基于微信小程序的智慧校园导航系统研究

    2023-12-08 10:06:04       65 阅读
  11. AWS EC2使用 instance profile 访问S3

    2023-12-08 10:06:04       62 阅读
  12. C语言指针和内存管理

    2023-12-08 10:06:04       56 阅读
  13. Python实现的一个简单的GAN(生成对抗网络)例子

    2023-12-08 10:06:04       66 阅读