资源简介

开发环境为QT5.8+opencv3.2,主要实现了边缘检测,轮廓提取及轮廓跟踪,边缘检测使用了Canny算子、Sobel算子、Laplacian算子,轮廓跟踪使用八邻域法。

资源截图

代码片段和文件信息

#include “dialog.h“
#include “ui_dialog.h“
#include
#include

Dialog::Dialog(QWidget *parent) :
    QDialog(parent)
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

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

/*----------------------------
* 功能 : 响应用户点击打开图片按钮事件
*----------------------------
* 函数 : on_openImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_openImgBtn_clicked()
{
    //打开原始灰度图
    fileName = QFileDialog::getOpenFileName(this“Open Image““.““Image File(*.png *.jpg *.jpeg *.bmp)“);
    grayImg = imread(fileName.toLatin1().data()IMREAD_GRAYSCALE);
    if(grayImg.empty())
        return;

    //在QLabel中显示图像
    QPixmap *pixmap = new QPixmap(fileName);
    pixmap->scaled(ui->oriImgLabel->size() Qt::KeepAspectRatio);
    ui->oriImgLabel->setScaledContents(true);
    ui->oriImgLabel->setPixmap(*pixmap);
}

/*----------------------------
* 功能 : 响应用户点击边缘检测按钮事件
*----------------------------
* 函数 : on_edgeImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_edgeImgBtn_clicked()
{
    uchar index = ui->edgeComBox->currentIndex();//获取选择的算子的标号
    Mat edgeImg;

    switch (index) {
        case 0:
        {
            //Canny边缘检测
            Canny(grayImg edgeImg 30 80);
            break;
        }
        case 1:
        {
            //Sobel边缘检测
            Mat x_edgeImg y_edgeImg;
            Mat abs_x_edgeImg abs_y_edgeImg;

            /*****先对x方向进行边缘检测********/
            //因为Sobel求出来的结果有正负,8位无符号表示不全,故用16位有符号表示
            Sobel(grayImgx_edgeImg CV_16S 1 0 3 1 1 BORDER_DEFAULT);
            convertScaleAbs(x_edgeImg abs_x_edgeImg);//将16位有符号转化为8位无符号

            /*****再对y方向进行边缘检测********/
            Sobel(grayImg y_edgeImg CV_16S 0 1 3 1 1 BORDER_DEFAULT);
            convertScaleAbs(y_edgeImg abs_y_edgeImg);

            addWeighted(abs_x_edgeImg 0.5 abs_y_edgeImg 0.5 0 edgeImg);
            break;
        }
        case 2:
        {
            //Laplacian边缘检测
            Mat lapImg;

            Laplacian(grayImg lapImg CV_16S 5 1 0 BORDER_DEFAULT);
            convertScaleAbs(lapImg edgeImg);
            break;
        }
        default:
        {
            break;
        }
    }


    imwrite(“edge.bmp“edgeImg);

    //在QLabel中显示图像
    QPixmap *pixmap = new QPixmap(“edge.bmp“);
    pixmap->scaled(ui->edgeImgLabel->size() Qt::KeepAspectRatio);
    ui->edgeImgLabel->setScaledContents(true);
    ui->edgeImgLabel->setPixmap(*pixmap);
}
/*----------------------------
* 功能 : 响应用户点击轮廓提取按钮事件
*----------------------------
* 函数 : on_conImgBtn_clicked
* 访问 : private
* 返回 : void
*
*/
void Dialog::on_conImgBtn_clicked()
{
    Mat contImg = Mat ::zeros(grayImg.size()CV_8UC3);//定义三通道轮廓提取图像

    Mat binImg;
    threshold(grayImg binImg 127 255 THRESH_OTSU);//大津法进行图像二值化

    vector> contours;
    vector hierarchy;
    //

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8766  2018-05-29 20:02  edgeDetection\edgeDetection\dialog.cpp

     文件        705  2018-05-29 19:50  edgeDetection\edgeDetection\dialog.h

     文件       4934  2018-05-29 19:43  edgeDetection\edgeDetection\dialog.ui

     文件       1604  2018-05-29 11:03  edgeDetection\edgeDetection\edgeDetection.pro

     文件      24077  2018-05-29 20:02  edgeDetection\edgeDetection\edgeDetection.pro.user

     文件     251078  2018-05-19 16:08  edgeDetection\edgeDetection\gray.bmp

     文件        175  2018-05-29 10:42  edgeDetection\edgeDetection\main.cpp

     目录          0  2018-05-29 20:03  edgeDetection\build-edgeDetection-Desktop_Qt_5_8_0_MSVC2015_64bit-Debug

     目录          0  2018-05-29 20:03  edgeDetection\edgeDetection

     目录          0  2018-05-29 19:14  edgeDetection

----------- ---------  ---------- -----  ----

               291339                    10


评论

共有 条评论