【Qt&OpenCV 图像的形态学变换 morpholgyEx】

简介: 【Qt&OpenCV 图像的形态学变换 morpholgyEx】

腐蚀用于分割(isolate)独立的图像元素,膨胀用于连接(join)相邻的元素。腐蚀、膨胀可用于去噪(低尺寸结构元素的腐蚀操作很容易去掉分散的椒盐噪声点),图像轮廓提取、图像分割、寻找图像中的明显的极大值区域或极小值区域。

高级形态学变换:

开运算:先腐蚀,再膨胀,可清除一些小东西(亮的),放大局部低亮度的区域

闭运算:先膨胀,再腐蚀,可清除小黑点

形态学梯度:膨胀图与腐蚀图之差,提取物体边缘

顶帽:原图像-开运算图,突出原图像中比周围亮的区域

黑帽:闭运算图-原图像,突出原图像中比周围暗的区域

前言

越来越多的开发人员选择基于开源的Qt框架与OpenCV来实现界面和算法,其原因不单单是无版权问题,更多是两个社区的发展蓬勃,可用来学习的资料与例程特别丰富。以下是关于利用Qt构建GUI并使用OpenCV中的morphologyEx函数进行图像形态学变换处理。

软件版本:Qt-5.12.0/OpenCV-4.5.3

平台:Windows10/11–64


一、函数介绍

函数原型

cv::morphologyEx( InputArray src, OutputArray dst,

int op, InputArray kernel,

Point anchor = Point(-1,-1), int iterations = 1,

int borderType = BORDER_CONSTANT,

const Scalar& borderValue = morphologyDefaultBorderValue() );


参数解释:

src:源图像;

dst:目标图像;

op:操作代号;


0: MORPH_ERODE–腐蚀运算(Erode operation)

1: MORPH_DILATE–膨胀运算(Dilate operation)

2: MORPH_OPEN–开运算(Opening operation)

3: MORPH_CLOSE–闭运算(Closing operation)

4: MORPH_GRADIENT–形态学梯度(Morphological gradient)

5: MORPH_TOPHAT–“顶帽”(Top hat)

6: MORPH_BLACKHAT–“黑帽”(Black hat)

7: MORPH_HITMISS


kernel:核(用于膨胀操作的结构元素),可使用getStructuringElement()方法创建

anchor:锚点坐标,为负代表核的中心坐标

iterations:迭代次数

borderType:像素外推方法,具有默认值 BORDER_CONSTANT

borderValue:边界为常数时的边界值,有默认值morphologyDefaultBorderValue()

二、演示

1、GUI

如上图创建Operator/Type的QComboBox控件和Morph的功能按钮QPushButton,对当前窗口的图像进行形态学变换,并输出状态信息。


2、代码实现

morphBtn的clicked()槽函数的实现代码:

void MainWindow::on_morphBtn_clicked()
{
    std::size_t numView = ui->tabWidget->currentIndex() % 3;
    if (dispMat[numView]->empty())
    {
        outputInfo(2, tr("Please make sure the Mat exist!"));
        return;
    }

    int morphElem = ui->morphElemCombo->currentIndex();
    int morphOperator = ui->morphOperatorCombo->currentIndex();
    int morphSize = ui->morphSpin->value();

    cv::Mat element = cv::getStructuringElement(morphElem, \
                                                cv::Size(2 * morphSize + 1, \
                                                         2 * morphSize + 1), \
                                                cv::Point(morphSize, morphSize));
    tmpMat->zeros(dispMat[numView]->rows, \
                  dispMat[numView]->cols, \
                  dispMat[numView]->type());
    cv::morphologyEx(*dispMat[numView], *tmpMat, morphOperator, element);

    if (ui->morphChkBox->isChecked())
    {
        *dispMat[numView] = tmpMat->clone();
        cvtMatPixmap(dispMat, dispPixmap, numView);
    }
    else
    {
        if (tmpMat->channels() == 3)
        {
            QImage tmpImage = QImage(tmpMat->data, tmpMat->cols,tmpMat->rows, \
                         static_cast<int>(tmpMat->step), \
                         QImage::Format_RGB888);
            dispPixmap[numView]->setPixmap(QPixmap::fromImage(tmpImage.rgbSwapped()));
        }
        else
        {
            QImage tmpImage = QImage(tmpMat->data, tmpMat->cols,tmpMat->rows, \
                         static_cast<int>(tmpMat->step), \
                         QImage::Format_Grayscale8);
            dispPixmap[numView]->setPixmap(QPixmap::fromImage(tmpImage.rgbSwapped()));
        }

    }
    outputInfo(1, tr("Morphology done."));

}

总结

以上是关于利用Qt进行GUI构建并使用OpenCV中的morphologyEx函数进行图像形态学变换处理。

目录
相关文章
|
7天前
|
计算机视觉
opencv之形态变换
opencv之形态变换
|
8天前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
13 1
|
8天前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
8 1
|
8天前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
20 0
|
8天前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
8 0
|
1月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
46 0
|
8天前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
8天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
|
8天前
|
SQL 数据可视化 关系型数据库
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计
|
8天前
|
安全 BI 数据库
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析

推荐镜像

更多