You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.6 KiB

5 months ago
import os
import sys
import cv2
from PyQt5.QtGui import QPixmap, QImage, qRed, qGreen, qBlue
from PyQt5.uic import loadUiType
from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog, QMessageBox
import matplotlib.pyplot as plt
import numpy as np
from MainWindow import Ui_Form
def cvImgtoQtImg(cvImg): # 定义opencv图像转PyQt图像的函数
QtImgBuf = cv2.cvtColor(cvImg, cv2.COLOR_BGR2BGRA)
QtImg = QImage(QtImgBuf.data, QtImgBuf.shape[1], QtImgBuf.shape[0], QImage.Format_RGB32)
return QtImg
def QImage2CV(qimg):
tmp = qimg
# 使用numpy创建空的图象
cv_image = np.zeros((tmp.height(), tmp.width(), 3), dtype=np.uint8)
for row in range(0, tmp.height()):
for col in range(0, tmp.width()):
r = qRed(tmp.pixel(col, row))
g = qGreen(tmp.pixel(col, row))
b = qBlue(tmp.pixel(col, row))
cv_image[row, col, 0] = r
cv_image[row, col, 1] = g
cv_image[row, col, 2] = b
cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGB2BGR)
return cv_image
def QPixmap2cv(qtpixmap):
qimg = qtpixmap.toImage()
temp_shape = (qimg.height(), qimg.bytesPerLine() * 8 // qimg.depth())
temp_shape += (4,)
ptr = qimg.bits()
ptr.setsize(qimg.byteCount())
result = np.array(ptr, dtype=np.uint8).reshape(temp_shape)
result = result[..., :3]
result = cv2.cvtColor(result, cv2.COLOR_RGB2BGR)
return result
main_ui, _ = loadUiType('ui/bb.ui')
class My_UI(QMainWindow, main_ui):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self) # 构造界面
self.picpath = ' '
self.openfile_name = ' '