OpenCV在PyQt5中获取本地图像的方法

OpenCV在PyQt5中通过按钮从本地获取图像并显示

步骤:

(1)在Pyqt5的qtdesigner中使用可视化设计出面板
在这里插入图片描述

在这里插入图片描述

(2)在pycharm的terminal或者cmd中输入 pyuic5 1.ui -o test.py,将得到的ui文件转换为py文件,在该py文件中会自动生成代码
(3)调用模块

import sys
from PyQt5 import QtCore,QtWidgets
import cv2.cv2 as cv

(4)定义button和显示路径用的label

	#定义按钮,命名为Get_Url
	self.Get_Url = QtWidgets.QPushButton(self.centralwidget)
	#centralwidget会自动生成
	self.Get_Url.setGeometry(QtCore.QRect(110,480,171,28))
	self.Get_Url.setObjectName('Get_Url')
	#定义标签,命名为The_Url
	self.The_Url = QWidgets.QPushButton(self.centralwidget)
	self.The_Url.setGeometry(QtCore.QRect(80,340,601,16))
	self.The_Url.setObjectName('The_Url')

(5)定义函数从文件中获取图像路径

def From_files(self):
	the_image_url = QtWidgets.QFileDialog.getOpenFileName(None,'select image','','')
	url = str(the_image_url).split("'")
	self.The_Url.setText(QtCore.QCoreApplication.translate("MainWindow","路径:" + url[1]))
	

(6)设置点击按钮后的函数信号

#在setupUi函数中书写:
	self.Get_Url.clicked.connect(self.From_files)

此时,已经可以将点击按钮然后在文件中选择的图像的路径显示在窗体中了,如图所示:
在这里插入图片描述

但是要直接通过cv.imread()函数调用还不行,因为此时我们只得到了这样一串字符:
在这里插入图片描述

也就是说,我们需要的是第一个冒号之后的这串字符,则需要对这个字符串进行切割,我使用了列表的方法:

#首先定义用于显示图像的函数
def OpenCV_Sight(self):
	img = cv.imread(self.The_Url.text().split(":")[1]+":"+self.The_Url.text().split(":")[2])
	cv.imshow('img',img)

此时,cv.imread()函数已经获取到了可以使用的图像地址,再定义一个按钮用于显示图像:

	self.OpenImage = QWidgets.QPushButton(self.centralwidget)
	self.OpenImage.setGeometry(QtCore.QRect(110,400,171,28))
	self.OpenInmage.setObjectName("OpenImage")

由于这个部件是后来加上的,需要在函数retranslateUi()中添加一行:

	self.OpenImage.setText(_translate("MainWindow","显示图像"))
	#函数retranslateUi()会自动生成

此时运行查看结果:
在这里插入图片描述

已经有了新出现的按钮,最后一步,再次定义函数信号,将刚才新加的按钮链接到OpenCV_Sight函数中:

	self.OpenImage.clicked.connect(self.OpenCV_Sight)

运行查看结果:
在这里插入图片描述

点击之后可以出现图像,目的达成。
完整代码:

import cv2.cv2 as cv
from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.Get_Url = QtWidgets.QPushButton(self.centralwidget)
        self.Get_Url.setGeometry(QtCore.QRect(110, 480, 171, 28))
        self.Get_Url.setObjectName("Get_Url")

        self.The_Url = QtWidgets.QLabel(self.centralwidget)
        self.The_Url.setGeometry(QtCore.QRect(80, 340, 601, 16))
        self.The_Url.setObjectName("The_Url")

        self.OpenImage = QtWidgets.QPushButton(self.centralwidget)
        self.OpenImage.setGeometry(QtCore.QRect(110,400,171,28))
        self.OpenImage.setObjectName("OpenImage")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        #设置点击按钮后的函数信号
        self.Get_Url.clicked.connect(self.From_files)
        self.OpenImage.clicked.connect(self.OpenCV_Sight)

    def From_files(self):
        the_image_url = QtWidgets.QFileDialog.getOpenFileName(None, 'select image', '', '')
        url = str(the_image_url).split("'")
        self.The_Url.setText(QtCore.QCoreApplication.translate("MainWindow", "路径:" + url[1]))
    def OpenCV_Sight(self):
        img = cv.imread(self.The_Url.text().split(":")[1]+":"+self.The_Url.text().split(":")[2])
        cv.imshow('img',img)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.Get_Url.setText(_translate("MainWindow", "获取图像地址"))
        self.The_Url.setText(_translate("MainWindow", "路径:未获取"))
        self.OpenImage.setText(_translate("MainWindow","显示图像"))
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5可以与OpenCV结合使用进行图像处理。你可以使用OpenCV库加载和处理图像,然后使用PyQt5来显示和操作图像。 首先,确保已经安装了PyQt5OpenCV库。你可以使用以下命令来安装它们: ``` pip install PyQt5 pip install opencv-python ``` 接下来,你可以使用以下代码加载图像并在PyQt5窗口显示: ```python import sys import cv2 from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow from PyQt5.QtGui import QPixmap class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("Image Processing with PyQt5 and OpenCV") self.setGeometry(100, 100, 640, 480) # 加载图像 image = cv2.imread('image.jpg') # 处理图像(例如,应用滤镜、调整亮度等) processed_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 将OpenCV图像转换为Qt Pixmap qimage = QImage(processed_image.data, processed_image.shape[1], processed_image.shape[0], QImage.Format_Grayscale8) pixmap = QPixmap.fromImage(qimage) # 在标签显示图像 label = QLabel(self) label.setPixmap(pixmap) label.resize(pixmap.width(), pixmap.height()) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在上面的示例,我们创建了一个继承自`QMainWindow`的主窗口类。在`initUI`方法,我们加载了一张图像并对其进行处理(此处使用了灰度化处理)。然后,我们将处理后的图像转换为Qt Pixmap,并在一个标签显示出来。 请注意,你需要将代码的`image.jpg`替换为你自己的图像文件路径。 这是一个简单的示例,你可以根据自己的需求进一步扩展图像处理功能。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值