《OpenCv视觉之眼》Python图像处理三+pyqt5

这一期的内容是关于图片属性读取,RIO(region of interest)兴趣区域选择,RGB通道展示三方面。需要了解这三个方面的概念,具体介绍参考教程


代码内容如下:
python主文件

# https://blog.csdn.net/qq_42451251/article/details/107756633   课程地址
import sys
import cv2
import os
import matplotlib
import matplotlib.pyplot as plt

matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QFileDialog, QMainWindow

from openImgUI01 import Ui_MainWindow

class dakaiImg(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def openFileAdress(self):
        '''获取文件地址'''
        fileName, fileType = QtWidgets.QFileDialog.getOpenFileName(None, "选取文件", os.getcwd(),"All Files(*);;Text Files(*.txt)")
        self.imgAddress.setText(fileName)

    def checkPor(self):
        ads=self.imgAddress.text()
        ads=str(ads)
        print("dizhi",ads)
        img = cv2.imread(ads)
        # 获取图像尺寸和通道数
        h, w = img.shape[0:2]
        # 打印获取的数据
        self.imageValue.setText("length:"+str(h) +"width:"+ str(w))
        print(h, w)

    def ROI(self):
        plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
        ads=self.imgAddress.text()
        ads=str(ads)
        print("dizhi",ads)
        img = cv2.imread(ads)
        # 获取图像尺寸和通道数
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img1 = img[100:200, 300:400]
        img[:100, :100] = img1  # ROI区域移植到原图上面左上角
        #显示图像
        titles = ['ROI移植', 'ROI区域']  # 标题
        images = [img, img1]  # 图像对比显示
        for i in range(2):
            plt.subplot(1, 2, i + 1), plt.imshow(images[i])
            plt.title(titles[i])
            plt.axis('off')  # 关闭坐标轴  设置为on则表示开启坐标轴
        plt.show()  # 显示图像

    def showRGB(self):
        plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
        ads=self.imgAddress.text()
        ads=str(ads)
        print("dizhi",ads)
        img = cv2.imread(ads)
        # 3通道获取
        B = img[:, :, 0]
        G = img[:, :, 1]
        R = img[:, :, 2]
        # 打印3通道
        print('B', B)
        print('G', G)
        print('R', R)
        # 转显示格式的目的是因为我们opencv读取图像是以BGR格式读取,而matplotlib显示图像是以RBG格式显示,因此,我们需要通过以下函数进行格式转换,该函数后面会讲到哦!
        B = cv2.cvtColor(B, cv2.COLOR_BGR2RGB)  # BGR转换为RGB显示格式
        G = cv2.cvtColor(G, cv2.COLOR_BGR2RGB)  # BGR转换为RGB显示格式
        R = cv2.cvtColor(R, cv2.COLOR_BGR2RGB)  # BGR转换为RGB显示格式
        # 显示图像
        titles = ['B通道', 'G通道', 'R通道']  # 标题
        images = [B, G, R]  # 图像对比显示
        for i in range(3):
            plt.subplot(1, 3, i + 1), plt.imshow(images[i])
            plt.title(titles[i])
            plt.axis('off')  # 关闭坐标轴  设置为on则表示开启坐标轴
        plt.show()  # 显示图像



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = dakaiImg()
    window.show()
    sys.exit(app.exec_())

pyUI文件

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1019, 540)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.imgAddress = QtWidgets.QLineEdit(self.centralwidget)
        self.imgAddress.setGeometry(QtCore.QRect(20, 30, 181, 20))
        self.imgAddress.setObjectName("imgAddress")
        self.openImg = QtWidgets.QPushButton(self.centralwidget)
        self.openImg.setGeometry(QtCore.QRect(220, 30, 41, 21))
        self.openImg.setObjectName("openImg")
        self.imageValue = QtWidgets.QTextEdit(self.centralwidget)
        self.imageValue.setGeometry(QtCore.QRect(10, 70, 291, 411))
        self.imageValue.setObjectName("imageValue")
        self.property = QtWidgets.QPushButton(self.centralwidget)
        self.property.setGeometry(QtCore.QRect(270, 30, 75, 23))
        self.property.setObjectName("property")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(360, 30, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(440, 30, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.picshow = QtWidgets.QGraphicsView(self.centralwidget)
        self.picshow.setGeometry(QtCore.QRect(330, 70, 641, 411))
        self.picshow.setObjectName("picshow")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1019, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.property.clicked.connect(MainWindow.checkPor)
        self.openImg.clicked.connect(MainWindow.openFileAdress)
        self.pushButton.clicked.connect(MainWindow.ROI)
        self.pushButton_2.clicked.connect(MainWindow.showRGB)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.openImg.setText(_translate("MainWindow", "..."))
        self.property.setText(_translate("MainWindow", "查看属性"))
        self.pushButton.setText(_translate("MainWindow", "ROI移植"))
        self.pushButton_2.setText(_translate("MainWindow", "RGB"))

效果如下

请添加图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值