MATLAB界面化编程实现图片选取与保存功能

版权申诉
ZIP格式 | 237KB | 更新于2024-10-20 | 95 浏览量 | 0 下载量 举报
收藏
资源摘要信息: "在本节中,我们将详细介绍如何使用Matlab软件和GUIDE工具箱来创建一个图形用户界面(GUI),用于加载和处理图片。用户可以通过GUI打开一幅图片,然后选取其中的一部分,并在界面的一侧显示出来。此外,用户还可以选择将选取的部分保存为一幅新的图片,或者导出所选图片的矩阵数据,并将矩阵输出到文本文件中。" 知识点: 1. MATLAB编程基础 - MATLAB是一种用于数值计算、可视化以及编程的高级语言和交互式环境。它在工程和科学计算领域广泛使用。 - MATLAB包含了大量的内置函数和工具箱,可以直接应用于各种科学和工程问题。 2. MATLAB中的GUIDE工具 - GUI(Graphical User Interface)是图形用户界面的缩写。GUIDE是MATLAB提供的一种快速创建GUI的应用程序。 - 使用GUIDE可以不必从零开始编写代码,而是通过一个交互式的界面设计环境来拖放组件,并自动生成布局代码。 3. 图片的加载与显示 - 在MATLAB中,图片可以以矩阵的形式进行处理。加载图片时,MATLAB会将其作为二维矩阵(灰度图像)或三维矩阵(彩色图像)读入内存。 - 使用`imread`函数可以读取图片文件,并将其转换为MATLAB中的矩阵。 4. 图片区域选取 - 选取图片中的一部分可以通过指定矩阵的一个子区域来完成。 - 在MATLAB中,可以使用索引操作来选取图片矩阵的一个区域,例如`img(a:b, c:d, :)`来选取彩色图片的矩形区域。 5. 图片的保存 - MATLAB提供了`imwrite`函数用于将矩阵数据写入图片文件。这允许用户将选取的图片部分保存为新的图片文件。 - 保存图片时需要指定文件名和文件类型(如.jpg或.png)。 6. 矩阵的导出 - MATLAB允许用户将矩阵数据导出到文本文件中,这通常使用`save`函数实现,可以导出为`.txt`格式。 - 导出时可以选择是否包含变量名、是否以二进制形式保存等选项。 7. 图像处理和GUI编程实践 - 本项目展示了如何将图像处理技术和GUI编程相结合,提高用户与程序交互的便捷性和直观性。 - 实践中,用户可以通过GUI直接对图片进行操作,而无需深入了解代码,简化了图片处理流程。 8. GUI控件使用 - 在GUIDE创建的GUI中,可以添加各种控件,如按钮、文本框、滑动条等,以实现用户与程序的交互。 - 每个控件通常都会触发一个回调函数,开发者可以在回调函数中实现特定的功能。 9. GUI设计注意事项 - 在设计GUI时,应考虑易用性和直观性,使用户能够方便地进行操作。 - 应合理布局控件,确保用户界面的清晰和功能的可达性。 10. 开源资源的使用 - 本项目可能涉及到对开源库或资源的使用,开发者可以通过查找和使用相关资源来提高开发效率和程序的可用性。 通过上述知识点的介绍,我们可以了解到如何使用MATLAB结合GUIDE工具来实现一个简单的图片处理应用程序。这个过程涉及到图像的加载、显示、处理以及与用户交互的界面设计。用户通过图形界面来实现对图片的操作,而不必深入了解背后的代码细节,大大降低了技术门槛,增加了程序的易用性。

相关推荐

filetype

window.onload = function () {     function hotChange() {         var current_index = 0;         var timer = window.setInterval(antoChange, 3000);         var button_li = document.getElementById("button").getElementsByTagName("li");         var pic_li = document.getElementById("banner_pic").getAttributeNames("li");         for (var i = 0; i < button_li.length; i++) {             button_li[i].onmouseover = function () {                 if (timer) {                     clearInterval(timer);                 }                 for (var j = 0; j < pic_li.length; j++) {                     if (button_li[j] == this) {                         current_index = j;                         button_li[j].className = "current";                         pic_li[j].className = "current";                     }                     else {                         pic_li.className = "pic";                         button_li[j].className = "but";                     }                 }             }             button_li[i].onmouseover = function () {                 timer = setInterval(antoChange, 3000);             }         }         function antoChange() {             ++current_index;             if (current_index = button_li.length) {                 current_index = 0;             }             for (var i = 0; i < button_li.length; i++) {                 if (i == current_index) {                     button_li[i].className = "current";                     pic_li[i].className = "current";                 }                 else {                     button_li[i].className = "but";                     pic_li[i].className = "pic";                 }             }         }     }     hotChange(); }

67 浏览量
filetype

import cv2 import sys import os import time from PyQt5 import QtGui #重新导入 from PyQt5 import QtCore #重新导入 from showPic import Ui_MainWindow from PyQt5.QtCore import * from PyQt5.QtGui import * #导入的外面 from PyQt5.QtWidgets import * camera_path = 0 # 0:自带摄像头 1:外接摄像头 "xxx.mp4" "rtsp://admin:pwd@192.168.2.10/cam/..." capture = cv2.VideoCapture(camera_path) # 初始化播放器 流媒体 fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # XVID/DIVX MPEG MJPG X264 video_writer = cv2.VideoWriter("image/myself.mp4", fourcc, 25, (960, 540)) # 存放路径、、帧率fps、尺寸(且保证下面的frame也是这个尺寸) class videoShow(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.dir_path = r"E:\pycharm\new_subject\image/" self.pushButton_play.clicked.connect(self.play_video) self.pushButton_pause.clicked.connect(self.pause_video) def play_video(self): self.playing = True def pause_video(self): self.playing = False def timer_pic(self): image_name = self.dir_path + self.file_list[self.n] url = image_name pic_image = cv2.imread(url) pic_image = cv2.cvtColor(pic_image, cv2.COLOR_BGR2RGB) # 将BGR格式图像转换成RGB height, width = pic_image.shape[:2] pixMap = QImage(pic_image.data, width, height, width*3, QImage.Format_RGB888) # 将RGB格式图像转换为八位图 pixMap = QPixmap.fromImage(pixMap) ratio = max(width/self.label.width(), height/self.label.height()) pixMap.setDevicePixelRatio(ratio) # 根据图片比例显示 self.label.setAlignment(Qt.AlignCenter) # 设置居中 self.label.setPixmap(pixMap) if self.playing: flag, frame = capture.read() if flag is False: return frame = cv2.resize(frame, (960, 540)) video_writer.write(frame) cv2.namedWindow("video", 0) cv2.imshow("video", frame) key = cv2.waitKey(25) if key == 27: video_writer.release() cv2.destroyAllWindows() sys.exit(0) if __name__ == '__main__': app = QApplication(sys.argv) ui = videoShow() ui.show() sys.exit(app.exec_()) 优化这段代码,实现录制视频以及点击按钮实现录制、播放、暂停

153 浏览量
filetype

import sys import os import time from PyQt5 import QtGui #重新导入 from PyQt5 import QtCore #重新导入 from showPic import Ui_MainWindow from PyQt5.QtCore import * from PyQt5.QtGui import * #导入的外面 from PyQt5.QtWidgets import * import cv2 # 方法二 class picShow(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) # 方法一 # self.picMap = QtGui.QPixmap("img0.jpg") # self.label.setGeometry(QtCore.QRect(40, 40, 960, 560)) # 修改大小 # self.label.setPixmap(self.picMap) # 方法二(常用) self.n = 0 self.timer = QTimer(self) # 创建QT计时器 self.timer.timeout.connect(self.timer_pic) # 链接计时器触发函数 self.timer.start(1000) # 设置轮播间隔,里面单位是毫秒 self.dir_path = r"E:\pycharm\new_subject\image/" # r用来确保斜杠转义问题,最后的/一定要带上 self.file_list = os.listdir(self.dir_path) # print(file_list) def timer_pic(self): self.n += 1 # 调用函数实现自增 if self.n >= len(self.file_list): # 回退索引,轮播效果 self.n = 0 image_name = self.dir_path + self.file_list[self.n] url = image_name pic_image = cv2.imread(url) pic_image = cv2.cvtColor(pic_image, cv2.COLOR_BGR2RGB) # 将BGR格式图像转换成RGB height, width = pic_image.shape[:2] pixMap = QImage(pic_image.data, width, height, width*3, QImage.Format_RGB888) # 将RGB格式图像转换为八位图 pixMap = QPixmap.fromImage(pixMap) ratio = max(width/self.label.width(), height/self.label.height()) pixMap.setDevicePixelRatio(ratio) # 根据图片比例显示 self.label.setAlignment(Qt.AlignCenter) # 设置居中 self.label.setPixmap(pixMap) if __name__ == '__main__': app = QApplication(sys.argv) ui = picShow() ui.show() sys.exit(app.exec_())每一行是什么意思?

206 浏览量