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_())

版权声明:本文为LZH_1108原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。