qt 怎么用mat做图像处理

时间: 2023-06-07 12:02:31 浏览: 31
Qt可以与Matlab的Mat图像处理库结合使用进行图像处理。在Qt中,可以使用QImage类来加载和保存图片。同时,可以使用OpenCV框架来处理Mat图像。以下是一些使用Qt和Mat进行图像处理的方法: 1. 加载和显示图像 使用QImage类的load()函数来加载图像文件,然后使用QPainter类的drawPixmap()函数将图像绘制到QWidget上。此外,可以使用imshow()函数来显示Mat图像。 2. 转换图像类型 由于Qt中的图像和Mat图像使用不同的数据结构,因此需要进行相应的转换。可以使用QImage的convertToFormat()函数将图像转换为OpenCV支持的格式,并使用Mat的Mat()函数将QImage转换为Mat。 3. 图像滤波 使用OpenCV提供的滤波器函数对图像进行平滑或锐化。例如,可以使用GaussianBlur()函数实现高斯滤波,使用cvtColor()函数将图像从一种颜色空间转换为另一种颜色空间。 4. 图像变换 通过使用Mat类中提供的几何变换函数来实现图像旋转、平移或缩放。例如,可以使用warpAffine()函数对图像进行变换。 5. 图像分割 可以使用OpenCV中的阈值处理函数对图像进行分割。在Qt中,可以使用QSlider来实现参数的交互式调整。 总之,使用Qt与Mat结合进行图像处理是一个功能强大的方法。它提供了许多方便的功能和工具,可以轻松地实现各种图像处理任务。
相关问题

qt写一个图像处理程序

好的,下面是一个简单的图像处理程序的示例代码,基于Qt框架和OpenCV库实现图像的读取、处理和展示。 首先需要在.pro文件中添加OpenCV的链接库: ``` LIBS += -lopencv_core -lopencv_highgui -lopencv_imgproc ``` 然后创建一个Qt窗口,添加一个按钮和一个标签用于显示图像: ```cpp #include <opencv2/opencv.hpp> #include <QMainWindow> #include <QHBoxLayout> #include <QPushButton> #include <QLabel> #include <QFileDialog> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void openImage(); void processImage(); private: QPushButton *openButton; QPushButton *processButton; QLabel *imageLabel; cv::Mat originalImage; }; ``` 在构造函数中初始化UI界面和信号槽: ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { openButton = new QPushButton(tr("Open")); processButton = new QPushButton(tr("Process")); imageLabel = new QLabel; QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(openButton); layout->addWidget(processButton); QWidget *centralWidget = new QWidget; centralWidget->setLayout(layout); setCentralWidget(centralWidget); connect(openButton, &QPushButton::clicked, this, &MainWindow::openImage); connect(processButton, &QPushButton::clicked, this, &MainWindow::processImage); } ``` 打开图像文件并显示: ```cpp void MainWindow::openImage() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.bmp)")); if (!fileName.isEmpty()) { originalImage = cv::imread(fileName.toStdString()); cv::cvtColor(originalImage, originalImage, cv::COLOR_BGR2RGB); QImage qimage(originalImage.data, originalImage.cols, originalImage.rows, QImage::Format_RGB888); imageLabel->setPixmap(QPixmap::fromImage(qimage)); } } ``` 图像处理: ```cpp void MainWindow::processImage() { // 图像处理代码 cv::Mat grayImage; cv::cvtColor(originalImage, grayImage, cv::COLOR_RGB2GRAY); QImage qimage(grayImage.data, grayImage.cols, grayImage.rows, grayImage.step, QImage::Format_Grayscale8); imageLabel->setPixmap(QPixmap::fromImage(qimage)); } ``` 最后,添加main函数并运行程序: ```cpp #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } ``` 这个程序只是一个简单的示例,你可以根据自己的需要进行修改和扩展。

qt生成mat格式的方式

在Qt中生成MAT格式的方式,需要使用OpenCV库。以下是一些步骤: 1. 安装OpenCV库 在Qt项目中,需要使用OpenCV库来处理图像和生成MAT格式。可以从OpenCV官网下载并安装适合您操作系统的版本。 2. 导入OpenCV库 在Qt项目中,需要将OpenCV库导入到项目中。在.pro文件中添加以下行: ``` INCLUDEPATH += /usr/local/include/opencv LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui ``` 注意,在Windows系统中,可能需要修改库文件路径。 3. 生成MAT格式 以下是一个生成MAT格式的示例代码: ```cpp #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main() { Mat image = imread("image.jpg"); if (!image.empty()) { FileStorage fs("output.mat", FileStorage::WRITE); fs << "image_data" << image; fs.release(); } return 0; } ``` 以上代码从文件中读取图像,然后使用FileStorage类将图像写入MAT格式的文件中。此代码仅供参考,实际应用中应该根据需要进行修改。

相关推荐

实现图像模糊到清晰的过程通常需要使用一些图像处理算法和技术,其中包括图像去噪、图像平滑、图像锐化等等。在这里,我们可以利用Qt和OpenCV库来实现这样的图像处理。 以下是一种基于Qt和OpenCV的图像模糊到清晰处理的示例代码: cpp #include <QApplication> #include <QImage> #include <QPixmap> #include <QLabel> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 读入模糊图像 cv::Mat blurImage = cv::imread("blurImage.jpg"); // 进行图像去噪处理 cv::Mat dstImage; cv::fastNlMeansDenoisingColored(blurImage, dstImage, 10, 10, 7, 21); // 进行图像平滑处理 cv::GaussianBlur(dstImage, dstImage, cv::Size(5, 5), 0, 0); // 进行图像锐化处理 cv::Mat kernel = (cv::Mat_<float>(3, 3) << -1, -1, -1, -1, 9, -1, -1, -1, -1); cv::filter2D(dstImage, dstImage, -1, kernel); // 将OpenCV Mat类型的图像转为Qt QImage类型的图像 QImage qImage = QImage((const unsigned char*)(dstImage.data), dstImage.cols, dstImage.rows, dstImage.cols*dstImage.channels(), QImage::Format_RGB888).rgbSwapped(); // 显示处理后的图像 QPixmap pixmap = QPixmap::fromImage(qImage); QLabel label; label.setPixmap(pixmap); label.show(); return a.exec(); } 上述代码中,我们首先读入了一张模糊的图像,并使用OpenCV的快速非局部均值去噪算法对其进行去噪处理。接着,我们对去噪后的图像进行高斯平滑处理,以进一步减少图像中的噪声。最后,我们使用卷积核对图像进行锐化处理,使图像变得更加清晰。 最后,我们将处理后的图像转换为Qt中的QImage类型,并通过QLabel来显示图像。
Qt是一个跨平台的C++应用程序开发框架,而OpenCV是一个开源的计算机视觉库。图像形状匹配是指在两幅图像中找出相似的物体或形状。 要在Qt中使用OpenCV进行图像形状匹配,我们可以首先加载和处理图像。可以使用OpenCV的函数读取图像文件,并将其转换为OpenCV的Mat格式。然后,可以对图像进行预处理,如调整大小、灰度化或二值化等。 接下来,我们可以使用OpenCV的模板匹配算法来实现图像形状匹配。模板匹配算法通过在图像中滑动一个模板图像,并计算模板图像与滑动窗口重叠区域的相似度来找到最佳匹配位置。OpenCV提供了多种模板匹配算法,如平方差匹配、相关匹配和归一化互相关匹配等。 在Qt中,我们可以在界面上显示原始图像和匹配结果。可以使用Qt的图像显示类,如QImage或QPixmap,将OpenCV的Mat格式图像转换为可在Qt界面上显示的格式。使用Qt的控件,如QLabel或QGraphicsView,将图像显示在界面上的特定位置。 最后,我们可以通过在Qt中实现用户交互来改进图像形状匹配的结果。例如,我们可以让用户在界面上绘制一个感兴趣的区域,并使用该区域作为模板进行匹配。还可以在匹配结果上绘制矩形或轮廓来突出显示匹配的物体或形状。 综上所述,Qt和OpenCV可以很好地结合起来实现图像形状匹配。Qt提供了界面设计和用户交互的功能,而OpenCV提供了处理图像和模板匹配的功能。通过合理地使用这两个库,我们可以轻松实现图像形状匹配的应用。
在使用Qt和OpenCV创建图像界面时,需要使用Qt的Label控件来显示OpenCV的Mat类图像。首先,需要将OpenCV的Mat类图像转换为Qt的QImage类。具体的代码如下所示: Mat temp; cvtColor(srcImg, temp, CV_BGR2RGB); QImage Qtemp = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888); ui.label->setPixmap(QPixmap::fromImage(Qtemp)); ui.label->resize(Qtemp.size()); ui.label->show(); 其中,srcImg是OpenCV中的图像,通过cvtColor函数将其从BGR格式转换为RGB格式,然后将其转换为QImage类,最后使用label控件的setPixmap函数设置图像,resize函数调整控件尺寸,show函数显示控件。 此外,还需要在Qt的头文件中引入相应的头文件,并在cpp文件中编写槽函数。具体代码如下所示: // Qt.h文件 #pragma once #pragma execution_character_set("utf-8")//显示中文字符 #include <QtWidgets/QMainWindow> #include <opencv2/opencv.hpp> #include "ui_MatdisplayinQt.h" using namespace cv; class MatdisplayinQt : public QMainWindow { Q_OBJECT public: MatdisplayinQt(QWidget *parent = Q_NULLPTR); int isGray = 0; Mat srcImg, grayImg; private: Ui::MatdisplayinQtClass ui; private slots: void on_checkBox_clicked(); void on_pushButton_clicked(); }; // Qt.cpp文件 #include "MatdisplayinQt.h" MatdisplayinQt::MatdisplayinQt(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); } void MatdisplayinQt::on_pushButton_clicked() { srcImg = imread("00.jpg"); cvtColor(srcImg, grayImg, CV_BGR2GRAY); Mat temp; QImage Qtemp; if (!isGray) { cvtColor(srcImg, temp, CV_BGR2RGB); Qtemp = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888); } else { cvtColor(grayImg, temp, CV_GRAY2RGB); Qtemp = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888); } ui.label->setPixmap(QPixmap::fromImage(Qtemp)); ui.label->resize(Qtemp.size()); ui.label->show(); } void MatdisplayinQt::on_checkBox_clicked() { if (ui.checkBox->isChecked()) { isGray = 1; } else { isGray = 0; } } 在这段代码中,on_pushButton_clicked槽函数用于打开图像,将其转换为QImage,并显示在label控件中,on_checkBox_clicked槽函数用于切换是否显示灰度图像。123 #### 引用[.reference_title] - *1* *2* *3* [【OpenCV+Qt】在Qt界面中显示OpenCV处理的图像](https://blog.csdn.net/qinchang1/article/details/86769773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
在Qt中使用OpenCV库可以实现更高级的图像处理功能,包括图像清晰化。下面是一个使用Qt和OpenCV 3实现图像清晰化的代码示例: cpp #include <QCoreApplication> #include <QImage> #include <QDebug> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> cv::Mat QImageToMat(const QImage& image) { cv::Mat mat(image.height(), image.width(), CV_8UC4, const_cast<uchar*>(image.bits()), image.bytesPerLine()); cv::Mat result; cv::cvtColor(mat, result, cv::COLOR_RGBA2BGR); return result; } QImage MatToQImage(const cv::Mat& mat) { cv::Mat temp; cv::cvtColor(mat, temp, cv::COLOR_BGR2RGB); QImage image(temp.data, temp.cols, temp.rows, static_cast<int>(temp.step), QImage::Format_RGB888); return image.copy(); } QImage sharpenImage(const QImage& input, double sigma, double threshold, double amount) { cv::Mat src = QImageToMat(input); cv::Mat dst; cv::GaussianBlur(src, dst, cv::Size(0, 0), sigma); cv::addWeighted(src, 1.0 + amount, dst, -amount, 0, dst); cv::Mat mask; cv::cvtColor(src, mask, cv::COLOR_BGR2GRAY); cv::threshold(mask, mask, threshold, 255, cv::THRESH_BINARY); cv::Mat result; src.copyTo(result, mask); return MatToQImage(result); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QImage inputImage("input.jpg"); QImage outputImage = sharpenImage(inputImage, 3.0, 128.0, 0.5); outputImage.save("output.jpg"); return a.exec(); } 在这个示例中,我们使用了OpenCV的GaussianBlur函数实现了高斯模糊操作,并使用addWeighted函数实现了图像锐化操作。我们还使用了OpenCV的cvtColor和threshold函数来创建一个掩码,以便仅对图像中的高对比度区域进行锐化操作。最后,我们使用QImageToMat和MatToQImage函数将OpenCV的Mat类型转换为Qt的QImage类型。 您可以根据需要调整sigma、threshold和amount参数来实现您想要的效果。
A:要在Qt中使用OpenCV来生成热成像图,可以按照以下步骤进行操作: 1. 用Qt Creator创建一个新的项目。 2. 在项目中包含OpenCV库,可以通过在.pro文件中添加如下行来完成: INCLUDEPATH += /usr/local/include/opencv4 LIBS += -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc 3. 为图像分配一组颜色映射。颜色地图是一个二维数组,其中每个元素都是一个RGB值,表示图像值与颜色之间的对应关系。以下是一个简单的彩色地图: colormap[0] = cv::Vec3b(255, 0, 0); // blue colormap[1] = cv::Vec3b(0, 255, 0); // green colormap[2] = cv::Vec3b(0, 0, 255); // red 4. 对输入图像进行归一化处理以确保其值在0到1之间。可以使用normalize()函数完成此操作。 cv::Mat normalizedImage; cv::normalize(inputImage, normalizedImage, 0, 1, cv::NORM_MINMAX); 5. 使用applyColorMap()函数将颜色映射应用于归一化的图像。 cv::Mat coloredImage; cv::applyColorMap(normalizedImage, coloredImage, cv::COLORMAP_JET); 6. 显示生成的热成像图像。 cv::imshow("Heatmap", coloredImage); cv::waitKey(0); 完整的代码如下: #include <opencv2/opencv.hpp> int main(int argc, char *argv[]) { // Load the input image cv::Mat inputImage = cv::imread("input.png", cv::IMREAD_GRAYSCALE); // Define the color map cv::Mat colormap(1, 256, CV_8UC3); for (int i = 0; i < 256; i++) { uchar r, g, b; if (i < 64) { b = 255; g = 4 * i; r = 0; } else if (i < 128) { b = 255 - 4 * (i - 64); g = 255; r = 0; } else if (i < 192) { b = 0; g = 255; r = 4 * (i - 128); } else { b = 0; g = 255 - 4 * (i - 192); r = 255; } colormap.at<cv::Vec3b>(0, i) = cv::Vec3b(b, g, r); } // Normalize the input image cv::Mat normalizedImage; cv::normalize(inputImage, normalizedImage, 0, 1, cv::NORM_MINMAX); // Apply the color map cv::Mat coloredImage; cv::applyColorMap(normalizedImage, coloredImage, colormap); // Display the image cv::imshow("Heatmap", coloredImage); cv::waitKey(0); return 0; }
以下是一个基于Qt和OpenCV的简单移动检测实现: cpp #include <QCoreApplication> #include <QObject> #include <QThread> #include <QDebug> #include <opencv2/opencv.hpp> using namespace cv; class VideoCaptureWorker : public QObject { Q_OBJECT public: VideoCaptureWorker(QObject *parent = nullptr) : QObject(parent) {} public slots: void doWork() { VideoCapture cap(0); if (!cap.isOpened()) { qDebug() << "Failed to open camera!"; return; } Mat prevFrame, currFrame; cap >> prevFrame; cv::cvtColor(prevFrame, prevFrame, COLOR_BGR2GRAY); while (true) { cap >> currFrame; cv::cvtColor(currFrame, currFrame, COLOR_BGR2GRAY); Mat diffFrame; cv::absdiff(currFrame, prevFrame, diffFrame); cv::threshold(diffFrame, diffFrame, 30, 255, THRESH_BINARY); int count = cv::countNonZero(diffFrame); qDebug() << "Count: " << count; if (count > 10000) { qDebug() << "Movement detected!"; } prevFrame = currFrame.clone(); cv::imshow("Camera", currFrame); if (waitKey(30) == 'q') { break; } } cap.release(); } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); VideoCaptureWorker *worker = new VideoCaptureWorker(&a); QThread *thread = new QThread(&a); QObject::connect(thread, &QThread::started, worker, &VideoCaptureWorker::doWork); QObject::connect(&a, &QCoreApplication::aboutToQuit, thread, &QThread::quit); worker->moveToThread(thread); thread->start(); return a.exec(); } 这个例子中,我们使用了Qt的多线程机制,将摄像头读取和图像处理的工作放在了一个独立的线程中。在每一帧图像中,我们通过计算当前帧和前一帧的灰度图像的差异,得到一个二值图像。如果差异像素点的数量超过一定阈值,则判断为有移动发生。在控制台输出提示信息,并可以通过弹出窗口显示当前帧的图像。 需要注意的是,这只是一个简单的移动检测实现,实际使用中需要针对具体场景进行算法和参数的调整,以获得更好的效果。

最新推荐

传媒互联网产业行业研究ihone ro可拍摄空间视频支持于ision ro观看-3页.pdf.zip

行业报告 文件类型:PDF格式 大小:10M以内 用途:行业研究报告

基于ESP8266的DIY定量磨豆机.zip

1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 -------- 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

安全文明监理实施细则_工程施工土建监理资料建筑监理工作规划方案报告_监理实施细则.ppt

安全文明监理实施细则_工程施工土建监理资料建筑监理工作规划方案报告_监理实施细则.ppt

"REGISTOR:SSD内部非结构化数据处理平台"

REGISTOR:SSD存储裴舒怡,杨静,杨青,罗德岛大学,深圳市大普微电子有限公司。公司本文介绍了一个用于在存储器内部进行规则表达的平台REGISTOR。Registor的主要思想是在存储大型数据集的存储中加速正则表达式(regex)搜索,消除I/O瓶颈问题。在闪存SSD内部设计并增强了一个用于regex搜索的特殊硬件引擎,该引擎在从NAND闪存到主机的数据传输期间动态处理数据为了使regex搜索的速度与现代SSD的内部总线速度相匹配,在Registor硬件中设计了一种深度流水线结构,该结构由文件语义提取器、匹配候选查找器、regex匹配单元(REMU)和结果组织器组成。此外,流水线的每个阶段使得可能使用最大等位性。为了使Registor易于被高级应用程序使用,我们在Linux中开发了一组API和库,允许Registor通过有效地将单独的数据块重组为文件来处理SSD中的文件Registor的工作原

typeerror: invalid argument(s) 'encoding' sent to create_engine(), using con

这个错误通常是由于使用了错误的参数或参数格式引起的。create_engine() 方法需要连接数据库时使用的参数,例如数据库类型、用户名、密码、主机等。 请检查你的代码,确保传递给 create_engine() 方法的参数是正确的,并且符合参数的格式要求。例如,如果你正在使用 MySQL 数据库,你需要传递正确的数据库类型、主机名、端口号、用户名、密码和数据库名称。以下是一个示例: ``` from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://username:password@hos

数据库课程设计食品销售统计系统.doc

数据库课程设计食品销售统计系统.doc

海量3D模型的自适应传输

为了获得的目的图卢兹大学博士学位发布人:图卢兹国立理工学院(图卢兹INP)学科或专业:计算机与电信提交人和支持人:M. 托马斯·福吉奥尼2019年11月29日星期五标题:海量3D模型的自适应传输博士学校:图卢兹数学、计算机科学、电信(MITT)研究单位:图卢兹计算机科学研究所(IRIT)论文主任:M. 文森特·查维拉特M.阿克塞尔·卡里尔报告员:M. GWendal Simon,大西洋IMTSIDONIE CHRISTOPHE女士,国家地理研究所评审团成员:M. MAARTEN WIJNANTS,哈塞尔大学,校长M. AXEL CARLIER,图卢兹INP,成员M. GILLES GESQUIERE,里昂第二大学,成员Géraldine Morin女士,图卢兹INP,成员M. VINCENT CHARVILLAT,图卢兹INP,成员M. Wei Tsang Ooi,新加坡国立大学,研究员基于HTTP的动态自适应3D流媒体2019年11月29日星期五,图卢兹INP授予图卢兹大学博士学位,由ThomasForgione发表并答辩Gilles Gesquière�

1.创建以自己姓名拼音缩写为名的数据库,创建n+自己班级序号(如n10)为名的数据表。2.表结构为3列:第1列列名为id,设为主键、自增;第2列列名为name;第3列自拟。 3.为数据表创建模型,编写相应的路由、控制器和视图,视图中用无序列表(ul 标签)呈现数据表name列所有数据。 4.创建视图,在表单中提供两个文本框,第一个文本框用于输入以上数据表id列相应数值,以post方式提交表单。 5.控制器方法根据表单提交的id值,将相应行的name列修改为第二个文本框中输入的数据。

步骤如下: 1. 创建数据库和数据表 创建名为xny_n10的数据表,其中xny为姓名拼音缩写,n10为班级序号。 ``` CREATE DATABASE IF NOT EXISTS xny_n10; USE xny_n10; CREATE TABLE IF NOT EXISTS xny_n10 ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), column3 VARCHAR(50) ); ``` 2. 创建模型 在app/Models目录下创建XnyN10.php文件,定义XnyN10模型类,继承自I

液压推板式隧道电阻炉计算机监控设计毕业设计.doc

液压推板式隧道电阻炉计算机监控设计毕业设计.doc

HAL多学科开放获取档案库的作用及代理重加密和认证委托的研究

0HAL编号:tel-038172580https://theses.hal.science/tel-038172580提交日期:2022年10月17日0HAL是一个多学科开放获取档案库,用于存储和传播科学研究文档,无论其是否发表。这些文档可以来自法国或国外的教育和研究机构,也可以来自公共或私人研究中心。0HAL多学科开放获取档案库旨在存储和传播法国或国外的教育和研究机构、公共或私人实验室发表或未发表的研究文档。0代理重加密和认证委托的贡献0Anass Sbai0引用此版本:0Anass Sbai. 代理重加密和认证委托的贡献. 离散数学[cs.DM]. 皮卡第朱尔大学, 2021. 法语. �NNT:2021AMIE0032�. �tel-03817258�0博士学位论文0专业“计算机科学”0提交给科技与健康学院博士学位学校0皮卡第朱尔大学0由0Anass SBAI0获得皮卡第朱尔大学博士学位0代理重加密和认证委托的贡献0于2021年7月5日,在评审人的意见后,面向考试委员会进行