这一期的内容是关于图片属性读取,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"))