第一次提交
1、hpi的可用代码; 2、修复了多次点击曝光后,福亮度数据错误的问题; 3、定标方式为大的蓝菲积分球的标准能量曲线,而不是基于asd的能量曲线;
This commit is contained in:
569
record_system_v21/2record_system_v2.1.py
Normal file
569
record_system_v21/2record_system_v2.1.py
Normal file
@ -0,0 +1,569 @@
|
||||
'''
|
||||
在V1.3的版本上改进:
|
||||
(1)使用界面(PyQt5)控制光谱仪的操作和显示
|
||||
(2)界面分为两个部分:一个是影像采集控制和显示;一个是光谱采集控制和显示
|
||||
'''
|
||||
from ximea import xiapi
|
||||
import numpy as np
|
||||
import PIL
|
||||
from osgeo import gdal #读写影像数据
|
||||
import os, sys, functools, re, shutil
|
||||
import datetime # 几种Python执行时间的计算方法:https://blog.csdn.net/wangshuang1631/article/details/54286551
|
||||
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, qApp, QDialog, QFileDialog
|
||||
from PyQt5.QtCore import pyqtSignal, QObject, QRunnable, QThreadPool
|
||||
from enter_window import *
|
||||
from image_Window import *
|
||||
from spectral_Window import *
|
||||
|
||||
import cv2
|
||||
import matplotlib
|
||||
matplotlib.use("Qt5Agg") # 声明使用QT5
|
||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
||||
from matplotlib.figure import Figure
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
|
||||
# 主窗口
|
||||
class enter_window(QMainWindow, Ui_enter_Window):
|
||||
def __init__(self, parent=None):
|
||||
super(enter_window, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
# 在刚打开软件在本窗口显示相机状态(是否打开)
|
||||
self.c = Communicate()
|
||||
self.c.openinfo.connect(self.printCamInfo)
|
||||
# self.end_Btn.clicked.connect(self.end_event) # 绑定登陆函数
|
||||
# self.exit_Btn.clicked.connect(sys.exit)
|
||||
|
||||
def printCamInfo(self):
|
||||
self.camstatus_tb.append('相机已打开!')
|
||||
|
||||
# 主窗口信号类
|
||||
class Communicate(QObject):
|
||||
openinfo = pyqtSignal()
|
||||
|
||||
# 图像窗口
|
||||
class image_window(QDialog, Ui_image_Window):
|
||||
def __init__(self, parent=None):
|
||||
super(image_window, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
#初始化值
|
||||
self.framenumber_le.setText('100')
|
||||
self.framerate_le.setText('15')
|
||||
self.exposureTime_le.setText('18000')
|
||||
self.filename_le.setText('test')
|
||||
self.filepath_le.setText(os.getcwd())
|
||||
#触发事件
|
||||
self.filepath_bt.clicked.connect(self.directory_select)
|
||||
self.framenumber_le.textEdited.connect(self.onchange)
|
||||
self.framerate_le.textEdited.connect(self.onchange)
|
||||
self.exposureTime_le.textEdited.connect(self.onchange)
|
||||
self.filename_le.textEdited.connect(self.onchange)
|
||||
self.filepath_le.textEdited.connect(self.onchange)
|
||||
self.dc_bt.clicked.connect(self.printDcInfo)
|
||||
self.wb_bt.clicked.connect(self.printWbInfo)
|
||||
self.save_bt.clicked.connect(self.printSaveInfo)
|
||||
self.record_bt.clicked.connect(self.printRecordInfo)
|
||||
|
||||
# 显示影像和调焦
|
||||
self.myImageFigure = MyImageFigure()
|
||||
self.image_glo.addWidget(self.myImageFigure)
|
||||
self.myFocusFigure = MyImageFigure()
|
||||
self.focus_glo.addWidget(self.myFocusFigure)
|
||||
|
||||
|
||||
def printDcInfo(self):
|
||||
self.statu_tb.append('采集暗电流!')
|
||||
|
||||
def printWbInfo(self):
|
||||
self.statu_tb.append('采集白板!')
|
||||
|
||||
def printRecordInfo(self):
|
||||
self.statu_tb.append('采集影像!')
|
||||
|
||||
def printSaveInfo(self):
|
||||
self.statu_tb.append('保存影像!')
|
||||
|
||||
def onchange(self):
|
||||
camera_operation.framenumber_input = self.framenumber_le.text()
|
||||
camera_operation.framerate_input = self.framerate_le.text()
|
||||
camera_operation.exposureTime_input = self.exposureTime_le.text()
|
||||
camera_operation.fn = self.filename_le.text()
|
||||
camera_operation.fp = self.filepath_le.text()
|
||||
|
||||
def directory_select(self):
|
||||
dirpath = QFileDialog.getExistingDirectory(self, '选择存储路径文件夹', '/home')
|
||||
self.filepath_le.setText(dirpath)
|
||||
camera_operation.fp = dirpath
|
||||
|
||||
# 图像窗口画图类
|
||||
class MyImageFigure(FigureCanvas):
|
||||
def __init__(self, width=5, height=4, dpi=100, ):
|
||||
#第一步:创建一个创建Figure
|
||||
self.fig = plt.figure(figsize=(width, height), dpi=dpi)
|
||||
#第二步:在父类中激活Figure窗口
|
||||
# this is the Canvas Widget that displays the `figure`
|
||||
# it takes the `figure` instance as a parameter to __init__
|
||||
super(MyImageFigure, self).__init__(self.fig) # 此句必不可少,否则不能显示图形
|
||||
#第三步:创建一个子图,用于绘制图形用,111表示子图编号,如matlab的subplot(1,1,1)
|
||||
self.axes = self.fig.add_subplot(1, 1, 1)
|
||||
self.axes.set_title('tangchao')
|
||||
#第四步:就是画图,【可以在此类中画,也可以在其它类中画】
|
||||
def plot(self, img):
|
||||
plt.imshow(img)
|
||||
|
||||
# 光谱窗口
|
||||
class spectral_window(QDialog, Ui_spectral_Window):
|
||||
def __init__(self, parent=None):
|
||||
super(spectral_window, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
# 初始化值
|
||||
self.filename_le.setText('test')
|
||||
self.filepath_le.setText(os.getcwd())
|
||||
# 触发事件
|
||||
self.filepath_bt.clicked.connect(self.directory_select)
|
||||
self.filename_le.textEdited.connect(self.onchange)
|
||||
self.filepath_le.textEdited.connect(self.onchange)
|
||||
self.dc_bt.clicked.connect(self.printDcInfo)
|
||||
self.wb_bt.clicked.connect(self.printWbInfo)
|
||||
self.record_bt.clicked.connect(self.printRecordInfo)
|
||||
|
||||
# 显示光谱
|
||||
self.spectralFigure = MySpectralFigure()
|
||||
self.spe_glo.addWidget(self.spectralFigure)
|
||||
|
||||
|
||||
|
||||
|
||||
def printDcInfo(self):
|
||||
self.statu_tb.append('采集暗电流!')
|
||||
|
||||
def printWbInfo(self):
|
||||
self.statu_tb.append('采集白板!')
|
||||
|
||||
def printRecordInfo(self):
|
||||
self.statu_tb.append('采集光谱!')
|
||||
|
||||
|
||||
def onchange(self):
|
||||
spectral_camera_operation.fn = self.filename_le.text()
|
||||
spectral_camera_operation.fp = self.filepath_le.text()
|
||||
|
||||
def directory_select(self):
|
||||
dirpath = QFileDialog.getExistingDirectory(self, '选择存储路径文件夹', '/home')
|
||||
self.filepath_le.setText(dirpath)
|
||||
spectral_camera_operation.fp = dirpath
|
||||
|
||||
# 光谱窗口画图类
|
||||
class MySpectralFigure(FigureCanvas):
|
||||
def __init__(self, width=5, height=4, dpi=100):
|
||||
#第一步:创建一个创建Figure
|
||||
self.fig = Figure(figsize=(width, height), dpi=dpi)
|
||||
#第二步:在父类中激活Figure窗口
|
||||
# this is the Canvas Widget that displays the `figure`
|
||||
# it takes the `figure` instance as a parameter to __init__
|
||||
super(MySpectralFigure, self).__init__(self.fig) # 此句必不可少,否则不能显示图形
|
||||
#第三步:创建一个子图,用于绘制图形用,111表示子图编号,如matlab的subplot(1,1,1)
|
||||
self.axes = self.fig.add_subplot(1, 1, 1)
|
||||
#第四步:就是画图,【可以在此类中画,也可以在其它类中画】
|
||||
def plot(self, y):
|
||||
self.axes.plot(y)
|
||||
|
||||
# 读写影像类
|
||||
class GRID(object):
|
||||
|
||||
#读图像文件
|
||||
def read_img(self, filename):
|
||||
try:
|
||||
dataset = gdal.Open(filename) # 打开文件
|
||||
im_width = dataset.RasterXSize # 栅格矩阵的列数
|
||||
im_height = dataset.RasterYSize # 栅格矩阵的行数
|
||||
num_bands = dataset.RasterCount # 栅格矩阵的波段数
|
||||
im_geotrans = dataset.GetGeoTransform() # 仿射矩阵
|
||||
im_proj = dataset.GetProjection() # 地图投影信息
|
||||
im_data = dataset.ReadAsArray(0, 0, im_width, im_height) # 将数据写成数组,对应栅格矩阵
|
||||
del dataset
|
||||
return im_proj, im_geotrans, im_data
|
||||
except:
|
||||
sys.exit()
|
||||
|
||||
#写文件,以写成tif为例
|
||||
def write_img(self, dst_filename, data):
|
||||
format = "ENVI"
|
||||
driver = gdal.GetDriverByName(format)
|
||||
RasterXSize = data.shape[2] # 遥感影像的sample(列数)
|
||||
RasterYSize = data.shape[1] # 遥感影像的line(行数)
|
||||
band = data.shape[0]
|
||||
# driver.Create()函数中RasterXSize代表影像的sample(列数),RasterYSize代表影像的line(行数)
|
||||
dst_ds = driver.Create(dst_filename, RasterXSize, RasterYSize, band, gdal.GDT_Float32)
|
||||
for i in range(band):
|
||||
dst_ds.GetRasterBand(i + 1).WriteArray(data[i, :, :]) # gdal的band从1开始,所以dst_ds.GetRasterBand(i+1)
|
||||
dst_ds = None
|
||||
|
||||
# 影像模式类:相关的函数和变量
|
||||
class camera_operation(object):
|
||||
"""
|
||||
在此版本的软件中,关于按钮点击控制光谱仪采集操作的绑定函数都放在了if __name__ == '__main__':中
|
||||
"""
|
||||
|
||||
#设置曝光时间和帧率
|
||||
framerate_input = 15 #随便给个初始值(初始值要和framerate_le控件初始值一致),从image_window获取的手动输入的帧率
|
||||
exposureTime_input = 18000
|
||||
@classmethod
|
||||
def set_exposureTime(cls, cam):
|
||||
# settings,cam.set_param("exposure",10000)
|
||||
cam.set_framerate(int(camera_operation.framerate_input))
|
||||
cam.set_exposure(int(camera_operation.exposureTime_input)) # 曝光时间单位为微秒,1s共有1000000微秒
|
||||
# print('Exposure was set to %i us' % cam.get_exposure())
|
||||
# print('Framerate was set to %i FPS' % cam.get_framerate())
|
||||
image_window_instance.statu_tb.append('Exposure was set to ' + str(cam.get_exposure()) + ' us')
|
||||
image_window_instance.statu_tb.append('Framerate was set to ' + str(cam.get_framerate()) + ' FPS')
|
||||
|
||||
|
||||
#开始采集数据
|
||||
framenumber_input = 100 #随便给个初始值(初始值要和framenumber_le控件初始值一致),从image_window获取的手动输入的帧数
|
||||
image_dc = 1 # 随便给个初始值,此变量用于存储采集到的暗电流影像
|
||||
image_wb = 1 # 随便给个初始值,此变量用于存储采集到的白板影像
|
||||
focus = True # 用于调焦
|
||||
|
||||
@classmethod
|
||||
def start_AcquireData(cls, cam):
|
||||
# 创建img = xiapi.Image()前需要设置一系列img参数,例如:格式、位深度、
|
||||
cam.set_imgdataformat('XI_RAW16')
|
||||
# create instance of Image to store image data and metadata
|
||||
img = xiapi.Image()
|
||||
# cam.get_buffer_policy()
|
||||
|
||||
print('Starting data acquisition...')
|
||||
starttime = datetime.datetime.now()
|
||||
|
||||
# 如果点击“调焦”按钮
|
||||
if image_window_instance.sender().objectName() == 'focus_bt':
|
||||
# camera_operation.set_exposureTime(cam)
|
||||
cam.start_acquisition()
|
||||
|
||||
while camera_operation.focus:
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
image_container = image_raw_numpy[339:639, 285:1650]
|
||||
image_window_instance.myFocusFigure.plot(image_container)
|
||||
image_window_instance.myFocusFigure.draw()
|
||||
|
||||
# 如果点击“白板”按钮,采集并保存白板影像到image_wb
|
||||
if image_window_instance.sender().objectName() == 'wb_bt':
|
||||
framenumber = 10
|
||||
cam.start_acquisition()
|
||||
image_container = np.empty((300, framenumber, 1365))
|
||||
|
||||
for i in range(framenumber):
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
image_container[:, i, :] = image_raw_numpy[339:639, 285:1650]
|
||||
|
||||
camera_operation.image_wb = image_container.mean(axis=1)
|
||||
|
||||
# 如果点击“暗电流”按钮,采集并保存暗电流影像到image_dc
|
||||
if image_window_instance.sender().objectName() == 'dc_bt':
|
||||
framenumber = 10
|
||||
cam.start_acquisition()
|
||||
image_container = np.empty((300, framenumber, 1365))
|
||||
|
||||
for i in range(framenumber):
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
image_container[:, i, :] = image_raw_numpy[339:639, 285:1650]
|
||||
|
||||
camera_operation.image_dc = image_container.mean(axis=1)
|
||||
|
||||
#如果点击“采集”按钮,自动去除暗电流,并且转化成反射率
|
||||
if image_window_instance.sender().objectName() == 'record_bt':
|
||||
framenumber = int(camera_operation.framenumber_input)
|
||||
cam.start_acquisition()
|
||||
rgb = np.empty((3, framenumber, 1365))
|
||||
|
||||
with open('corning410_test', 'wb') as f:
|
||||
for i in range(framenumber):
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
image_container = image_raw_numpy[339:639, 285:1650]
|
||||
|
||||
# 去除暗电流和转反射率
|
||||
if type(camera_operation.image_dc) is np.ndarray or type(camera_operation.image_wb) is np.ndarray:
|
||||
image_container = (image_container - camera_operation.image_dc).astype(
|
||||
np.float) / camera_operation.image_wb.astype(np.float)
|
||||
|
||||
rgb[:, i, :] = image_container[[36, 76, 121]]
|
||||
|
||||
f.write(image_container.flatten().tobytes())
|
||||
# 如果再这里每采集一帧就画出来,会非常影响采集速率,造成采集很慢
|
||||
# image_window_instance.myImageFigure.plot(image_container[1, :, :])
|
||||
# image_window_instance.myImageFigure.draw()
|
||||
|
||||
|
||||
# 画出影像
|
||||
# image_window_instance.myImageFigure.plot(
|
||||
# np.dstack((image_container[121, :, :].astype(np.int), image_container[76, :, :].astype(np.int),
|
||||
# image_container[36, :, :].astype(np.int))))
|
||||
try:
|
||||
image_window_instance.myImageFigure.plot(
|
||||
np.dstack((rgb[2, :, :], rgb[1, :, :], rgb[0, :, :])))
|
||||
image_window_instance.myImageFigure.draw()
|
||||
finally:
|
||||
print('画图出错')
|
||||
|
||||
endtime = datetime.datetime.now()
|
||||
print('影像采集用时:%d' % (endtime - starttime).seconds)
|
||||
|
||||
# stop data acquisition
|
||||
print('Stopping acquisition...')
|
||||
cam.stop_acquisition()
|
||||
|
||||
|
||||
#停止采集数据、计算波长、数据写入硬盘
|
||||
@classmethod
|
||||
def stop_AcquireDta(cls, cam, image_container, exposure = 400000, framerate = 90):
|
||||
# stop data acquisition
|
||||
print('Stopping acquisition...')
|
||||
cam.stop_acquisition()
|
||||
|
||||
|
||||
#保存数据
|
||||
fp = os.getcwd() #随便给个初始值(初始值要和filepath_le控件初始值一致),从image_window获取的手动输入的文件保存路径
|
||||
fn = 'test' #随便给个初始值(初始值要和filename_le控件初始值一致),从image_window获取的手动输入的帧率
|
||||
@classmethod
|
||||
def savedata(cls):
|
||||
# 保存路径
|
||||
filename = re.sub('/', '\\\\', camera_operation.fp) + '\\' + camera_operation.fn
|
||||
|
||||
#保存影像
|
||||
imagefile = os.getcwd() + '\\' + 'corning410_test'
|
||||
shutil.copyfile(imagefile, filename)
|
||||
|
||||
# 创建头文件,写入波长
|
||||
with open(filename + '.hdr', mode='w') as out_hdr: # python读取已存在txt文件时,读写模式为'r+',不是'r+w';w模式时,如果文件不存在会创建文件
|
||||
out_hdr.write('ENVI\n')
|
||||
out_hdr.write('samples = 1365\n')
|
||||
out_hdr.write('lines = ' + str(camera_operation.framenumber_input) + '\n')
|
||||
out_hdr.write('bands = 300\n')
|
||||
out_hdr.write('header offset = 0\n'
|
||||
'file type = ENVI Standard\n')
|
||||
out_hdr.write('data type = 4\ninterleave = bil\nbyte order = 0\n')
|
||||
out_hdr.write('exposure = ' + str(camera_operation.exposureTime_input) + '\n')
|
||||
out_hdr.write('framerate = ' + str(camera_operation.framerate_input) + '\n')
|
||||
out_hdr.write('wavelength= {399.95876000000004, 401.958324, 403.95788799999997, 405.95745200000005, 407.957016, 409.95658, 411.95614399999994, 413.955708, 415.955272, 417.95483599999994, 419.9544, 421.953964, 423.95352799999995, 425.953092, 427.952656, 429.95221999999995, 431.95178400000003, 433.951348, 435.95091199999996, 437.95047600000004, 439.95004, 441.94960399999997, 443.94916800000004, 445.948732, 447.94829599999997, 449.94785999999993, 451.947424, 453.946988, 455.94655199999994, 457.946116, 459.94568, 461.94524399999995, 463.944808, 465.944372, 467.94393599999995, 469.94350000000003, 471.943064, 473.94262799999996, 475.94219200000003, 477.941756, 479.94131999999996, 481.94088400000004, 483.940448, 485.94001199999997, 487.93957600000005, 489.93914, 491.938704, 493.93826799999994, 495.937832, 497.937396, 499.93695999999994, 501.936524, 503.936088, 505.93565199999995, 507.935216, 509.93478, 511.93434399999995, 513.933908, 515.9334719999999, 517.9330359999999, 519.9326000000001, 521.9321640000001, 523.931728, 525.931292, 527.930856, 529.9304199999999, 531.9299839999999, 533.9295480000001, 535.929112, 537.928676, 539.92824, 541.9278039999999, 543.9273679999999, 545.9269320000001, 547.926496, 549.92606, 551.925624, 553.9251879999999, 555.9247519999999, 557.9243160000001, 559.92388, 561.923444, 563.923008, 565.922572, 567.9221359999999, 569.9216999999999, 571.9212640000001, 573.920828, 575.920392, 577.919956, 579.9195199999999, 581.9190839999999, 583.9186480000001, 585.918212, 587.917776, 589.91734, 591.9169039999999, 593.9164679999999, 595.9160320000001, 597.915596, 599.91516, 601.914724, 603.9142879999999, 605.9138519999999, 607.9134159999999, 609.9129800000001, 611.912544, 613.912108, 615.911672, 617.9112359999999, 619.9107999999999, 621.9103640000001, 623.909928, 625.909492, 627.909056, 629.9086199999999, 631.9081839999999, 633.9077480000001, 635.907312, 637.906876, 639.90644, 641.9060039999999, 643.9055679999999, 645.9051319999999, 647.9046960000001, 649.90426, 651.903824, 653.903388, 655.9029519999999, 657.9025159999999, 659.9020800000001, 661.901644, 663.901208, 665.900772, 667.9003359999999, 669.8998999999999, 671.8994640000001, 673.899028, 675.898592, 677.898156, 679.8977199999999, 681.8972839999999, 683.8968480000001, 685.896412, 687.895976, 689.89554, 691.895104, 693.8946679999999, 695.8942319999999, 697.8937960000001, 699.89336, 701.892924, 703.892488, 705.8920519999999, 707.8916159999999, 709.8911800000001, 711.890744, 713.890308, 715.889872, 717.8894359999999, 719.8889999999999, 721.8885640000001, 723.888128, 725.887692, 727.887256, 729.88682, 731.8863839999999, 733.8859479999999, 735.8855120000001, 737.885076, 739.88464, 741.884204, 743.8837679999999, 745.8833319999999, 747.8828959999998, 749.8824599999998, 751.882024, 753.881588, 755.8811519999999, 757.8807159999999, 759.8802799999999, 761.8798439999998, 763.879408, 765.878972, 767.8785359999999, 769.8780999999999, 771.8776639999999, 773.8772279999998, 775.876792, 777.876356, 779.87592, 781.8754839999999, 783.8750479999999, 785.8746119999998, 787.8741759999998, 789.87374, 791.873304, 793.8728679999999, 795.8724319999999, 797.8719959999999, 799.8715599999998, 801.871124, 803.870688, 805.8702519999999, 807.8698159999999, 809.8693799999999, 811.8689439999998, 813.868508, 815.868072, 817.867636, 819.8671999999999, 821.8667639999999, 823.8663279999998, 825.8658919999998, 827.865456, 829.86502, 831.8645839999999, 833.8641479999999, 835.8637119999999, 837.8632759999998, 839.86284, 841.862404, 843.8619679999999, 845.8615319999999, 847.8610959999999, 849.8606599999998, 851.860224, 853.859788, 855.859352, 857.8589159999999, 859.8584799999999, 861.8580439999998, 863.8576079999998, 865.857172, 867.856736, 869.8562999999999, 871.8558639999999, 873.8554279999998, 875.8549919999998, 877.854556, 879.85412, 881.8536839999999, 883.8532479999999, 885.8528119999999, 887.8523759999998, 889.85194, 891.851504, 893.8510679999999, 895.8506319999999, 897.8501959999999, 899.8497599999998, 901.8493239999998, 903.848888, 905.848452, 907.8480159999999, 909.8475799999999, 911.8471439999998, 913.8467079999998, 915.846272, 917.845836, 919.8453999999999, 921.8449639999999, 923.8445279999999, 925.8440919999998, 927.843656, 929.84322, 931.8427839999999, 933.8423479999999, 935.8419119999999, 937.8414759999998, 939.84104, 941.840604, 943.840168, 945.8397319999999, 947.8392959999999, 949.8388599999998, 951.8384239999998, 953.837988, 955.837552, 957.8371159999999, 959.8366799999999, 961.8362439999999, 963.8358079999998, 965.835372, 967.834936, 969.8344999999999, 971.8340639999999, 973.8336279999999, 975.8331919999998, 977.832756, 979.83232, 981.831884, 983.8314479999999, 985.8310119999999, 987.8305759999998, 989.8301399999998, 991.829704, 993.829268, 995.8288319999999, 997.8283959999999}')
|
||||
|
||||
|
||||
@classmethod
|
||||
def close_camera(cls, cam):
|
||||
# stop communication
|
||||
cam.close_device()
|
||||
|
||||
# 光谱模式类:相关的函数和变量
|
||||
class spectral_camera_operation(object):
|
||||
"""
|
||||
在此版本的软件中,关于按钮点击控制光谱仪采集操作的绑定函数都放在了if __name__ == '__main__':中
|
||||
"""
|
||||
|
||||
#设置曝光时间和帧率
|
||||
@classmethod
|
||||
def set_exposureTime(cls, cam, exposure = 40000000):
|
||||
# settings,cam.set_param("exposure",10000)
|
||||
cam.set_exposure(exposure) # 曝光时间单位为微秒,1s共有1000000微秒
|
||||
cam.set_framerate(9)
|
||||
# print('Exposure was set to %i us' % cam.get_exposure())
|
||||
# print('Framerate was set to %i FPS' % cam.get_framerate())
|
||||
|
||||
spectral_window_instance.statu_tb.append('Exposure was set to ' + str(cam.get_exposure()) + ' us')
|
||||
spectral_window_instance.statu_tb.append('Framerate was set to ' + str(cam.get_framerate()) + ' FPS')
|
||||
|
||||
|
||||
#开始采集数据
|
||||
fp = os.getcwd() # 随便给个初始值(初始值要和filepath_le控件初始值一致),从spectral_window获取的手动输入的帧率
|
||||
fn = 'test' # 随便给个初始值(初始值要和filename_le控件初始值一致),从spectral_window获取的手动输入的帧率
|
||||
image_dc = 1 # 随便给个初始值,此变量用于存储采集到的暗电流影像
|
||||
spectral_wb = 1 # 随便给个初始值,此变量用于存储采集到的白板光谱
|
||||
spectral = np.empty((300, 10)).astype(np.float) # 此ndarray用于存储采集到的目标物光谱,每一列为一个光谱
|
||||
@classmethod
|
||||
def start_AcquireData(cls, cam):
|
||||
# 创建img = xiapi.Image()前需要设置一系列img参数,例如:格式、位深度、
|
||||
cam.set_imgdataformat('XI_RAW16')
|
||||
# create instance of Image to store image data and metadata
|
||||
img = xiapi.Image()
|
||||
|
||||
framenumber = 10 #每条光谱采集帧数
|
||||
spectralNumber = 10 #每次采集的光谱数
|
||||
spectralNumber_wb = 1 #每次采集的白板的光谱数
|
||||
spectral_container = np.empty((300, framenumber, 3))
|
||||
|
||||
print('Starting data acquisition...')
|
||||
starttime = datetime.datetime.now()
|
||||
|
||||
# 如果点击暗“暗电流”按钮
|
||||
if spectral_window_instance.sender().objectName() == 'dc_bt':
|
||||
cam.start_acquisition()
|
||||
for i in range(framenumber):
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
spectral_container[:, i, :] = image_raw_numpy[339:639, 967:970]
|
||||
spectral_camera_operation.image_dc = spectral_container.mean(axis=1)
|
||||
|
||||
# 如果点击“曝光/白板”按钮
|
||||
if spectral_window_instance.sender().objectName() == 'wb_bt':
|
||||
cam.start_acquisition()
|
||||
for j in range(spectralNumber_wb):
|
||||
for i in range(framenumber):
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
spectral_container[:, i, :] = image_raw_numpy[339:639, 967:970]
|
||||
for i in range(framenumber):#去除暗电流
|
||||
spectral_container[:, i, :] -= spectral_camera_operation.image_dc
|
||||
# spectral_camera_operation.spectral_wb = spectral_container.mean(axis=1).mean(axis=1)
|
||||
spectral_camera_operation.spectral_wb = spectral_container.mean(axis=1)
|
||||
|
||||
# 如果点击“采集”按钮,自动去除暗电流,并且转化成反射率
|
||||
if spectral_window_instance.sender().objectName() == 'record_bt':
|
||||
spectral_camera_operation.spectral = np.empty((300, 10)).astype(np.float) # 当第二次点击“采集”按钮时保证将上一次的数据清除
|
||||
cam.start_acquisition()
|
||||
for j in range(spectralNumber):
|
||||
for i in range(framenumber):
|
||||
cam.get_image(img) # get data and pass them from camera to img
|
||||
image_raw_numpy = img.get_image_data_numpy()
|
||||
spectral_container[:, i, :] = image_raw_numpy[339:639, 967:970]
|
||||
for i in range(framenumber): #去除暗电流
|
||||
spectral_container[:, i, :] -= spectral_camera_operation.image_dc
|
||||
# 转反射率
|
||||
# spectral_container = spectral_container.mean(axis=1).mean(axis=1).astype(
|
||||
# np.float) / spectral_camera_operation.spectral_wb.astype(np.float)
|
||||
|
||||
for i in range(framenumber): #每一帧除以白板光谱
|
||||
spectral_container[:, i, :] = spectral_container[:, i, :] / spectral_camera_operation.spectral_wb
|
||||
spectral_container = spectral_container.mean(axis=1).mean(axis=1)
|
||||
|
||||
|
||||
spectral_camera_operation.spectral[:, j] = spectral_container
|
||||
# 画出光谱
|
||||
spectral_window_instance.spectralFigure.plot(spectral_container)
|
||||
spectral_window_instance.spectralFigure.draw()
|
||||
# 保证当第二次点击“采集”按钮时spectral_container已经初始化
|
||||
spectral_container = np.empty((300, framenumber, 3))
|
||||
|
||||
|
||||
# # 计算波长
|
||||
def calculate_wavelength(x):
|
||||
wavelength = x * 1.999564 - 279.893
|
||||
return wavelength
|
||||
wavelength = np.empty(300)
|
||||
for i in range(340, 640):
|
||||
wavelength[i - 340] = calculate_wavelength(i)
|
||||
# 保存光谱为txt文件
|
||||
spectral_camera_operation.spectral = np.insert(spectral_camera_operation.spectral, 0, wavelength, axis=1)
|
||||
for i in range(spectralNumber):
|
||||
np.savetxt(spectral_camera_operation.fp + '\\' + spectral_camera_operation.fn + str(i) + '.txt',
|
||||
spectral_camera_operation.spectral[:, [0, i + 1]], fmt='%f')
|
||||
|
||||
|
||||
endtime = datetime.datetime.now()
|
||||
print('光谱采集用时:%d' % (endtime - starttime).seconds)
|
||||
|
||||
# stop data acquisition
|
||||
print('Stopping acquisition...')
|
||||
cam.stop_acquisition()
|
||||
|
||||
|
||||
@classmethod
|
||||
def close_camera(cls, cam):
|
||||
# stop communication
|
||||
cam.close_device()
|
||||
|
||||
|
||||
# 打开相机
|
||||
def open_camera():
|
||||
# create instance for first connected camera
|
||||
cam = xiapi.Camera()
|
||||
|
||||
# start communication to open specific device, use: cam.open_device_by_SN('41305651')
|
||||
print('Opening first camera...')
|
||||
cam.open_device()
|
||||
|
||||
# 打开相机后,显示相机信息
|
||||
print('SN: %s' % str(cam.get_device_sn(), encoding="utf-8"))
|
||||
print('Device name: %s' % str(cam.get_device_name(), encoding="utf-8"))
|
||||
print('Device name: %s' % str(cam.get_device_type(), encoding="utf-8"))
|
||||
print('Instance path: %s' % str(cam.get_device_inst_path(),
|
||||
encoding="utf-8")) # Returns device instance path in operating system.
|
||||
print('Location path: %s' % str(cam.get_device_loc_path(), encoding="utf-8"))
|
||||
|
||||
print('Debug level: %s' % cam.get_debug_level())
|
||||
print('Default number of threads per image processor: %d' % cam.get_proc_num_threads())
|
||||
cam.set_proc_num_threads(8)
|
||||
print('Current number of threads per image processor: %d' % cam.get_proc_num_threads())
|
||||
print('Is horizontal flip enabled?, %s' % str(cam.is_horizontal_flip()))
|
||||
print()
|
||||
|
||||
# This mode is supported by selected camera families: CB, MC, MT, MX
|
||||
cam.set_acq_timing_mode('XI_ACQ_TIMING_MODE_FRAME_RATE_LIMIT')
|
||||
mode_used = cam.get_acq_timing_mode()
|
||||
if mode_used == 'XI_ACQ_TIMING_MODE_FRAME_RATE_LIMIT':
|
||||
print('Mode is XI_ACQ_TIMING_MODE_FRAME_RATE_LIMIT')
|
||||
else:
|
||||
print('Mode is not XI_ACQ_TIMING_MODE_FRAME_RATE_LIMIT')
|
||||
sys.exit()
|
||||
|
||||
return cam
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = QApplication(sys.argv)
|
||||
camera = open_camera()
|
||||
|
||||
|
||||
# 实例化3个窗口
|
||||
enter_window_instance = enter_window()
|
||||
enter_window_instance.setWindowTitle('主窗口')
|
||||
image_window_instance = image_window()
|
||||
image_window_instance.setWindowTitle('影像窗口')
|
||||
spectral_window_instance = spectral_window()
|
||||
spectral_window_instance.setWindowTitle('光谱窗口')
|
||||
|
||||
enter_window_instance.c.openinfo.emit()
|
||||
|
||||
|
||||
# 从主窗口弹出影像窗口和光谱窗口
|
||||
enter_window_instance.image_mode_bt.clicked.connect(image_window_instance.show)
|
||||
enter_window_instance.spectral_mode_bt.clicked.connect(spectral_window_instance.show)
|
||||
|
||||
|
||||
########################################################影像窗口操作########################################################################
|
||||
# 设置曝光时间(帧率设置放在image_window类中实现)
|
||||
img_e_bt = image_window_instance.exposureTime_bt
|
||||
img_e_bt.clicked.connect(functools.partial(camera_operation.set_exposureTime, camera))
|
||||
|
||||
# 暗电流/白板
|
||||
image_window_instance.dc_bt.clicked.connect(functools.partial(camera_operation.start_AcquireData, camera))
|
||||
image_window_instance.wb_bt.clicked.connect(functools.partial(camera_operation.start_AcquireData, camera))
|
||||
|
||||
|
||||
# 采集影像
|
||||
image_window_instance.record_bt.clicked.connect(functools.partial(camera_operation.start_AcquireData, camera))
|
||||
|
||||
image_window_instance.focus_bt.clicked.connect(functools.partial(camera_operation.start_AcquireData, camera))
|
||||
|
||||
# 保存影像
|
||||
image_window_instance.save_bt.clicked.connect(camera_operation.savedata)
|
||||
|
||||
########################################################光谱窗口操作########################################################################
|
||||
# 设置曝光时间(帧率设置放在image_window类中实现)
|
||||
spec_e_bt = spectral_window_instance.wb_bt
|
||||
spec_e_bt.clicked.connect(functools.partial(spectral_camera_operation.set_exposureTime, camera))
|
||||
|
||||
# 暗电流/白板
|
||||
spectral_window_instance.dc_bt.clicked.connect(functools.partial(spectral_camera_operation.start_AcquireData, camera))
|
||||
spectral_window_instance.wb_bt.clicked.connect(functools.partial(spectral_camera_operation.start_AcquireData, camera))
|
||||
|
||||
# 采集光谱
|
||||
spectral_window_instance.record_bt.clicked.connect(functools.partial(spectral_camera_operation.start_AcquireData, camera))
|
||||
|
||||
|
||||
enter_window_instance.show()
|
||||
sys.exit(app.exec_())
|
||||
48
record_system_v21/arcus_control_ui.py
Normal file
48
record_system_v21/arcus_control_ui.py
Normal file
@ -0,0 +1,48 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'arcus_control_ui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.13.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_arcus_ui(object):
|
||||
def setupUi(self, arcus_ui):
|
||||
arcus_ui.setObjectName("arcus_ui")
|
||||
arcus_ui.resize(354, 171)
|
||||
self.centralwidget = QtWidgets.QWidget(arcus_ui)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.left_btn = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.left_btn.setGeometry(QtCore.QRect(100, 90, 61, 21))
|
||||
self.left_btn.setObjectName("left_btn")
|
||||
self.right_btn = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.right_btn.setGeometry(QtCore.QRect(170, 90, 61, 23))
|
||||
self.right_btn.setObjectName("right_btn")
|
||||
self.speed_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.speed_lineEdit.setGeometry(QtCore.QRect(101, 10, 131, 20))
|
||||
self.speed_lineEdit.setObjectName("speed_lineEdit")
|
||||
self.speed_ScrollBar = QtWidgets.QScrollBar(self.centralwidget)
|
||||
self.speed_ScrollBar.setGeometry(QtCore.QRect(100, 40, 131, 20))
|
||||
self.speed_ScrollBar.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.speed_ScrollBar.setObjectName("speed_ScrollBar")
|
||||
arcus_ui.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(arcus_ui)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 354, 23))
|
||||
self.menubar.setObjectName("menubar")
|
||||
arcus_ui.setMenuBar(self.menubar)
|
||||
self.statusbar = QtWidgets.QStatusBar(arcus_ui)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
arcus_ui.setStatusBar(self.statusbar)
|
||||
|
||||
self.retranslateUi(arcus_ui)
|
||||
QtCore.QMetaObject.connectSlotsByName(arcus_ui)
|
||||
|
||||
def retranslateUi(self, arcus_ui):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
arcus_ui.setWindowTitle(_translate("arcus_ui", "MainWindow"))
|
||||
self.left_btn.setText(_translate("arcus_ui", "左"))
|
||||
self.right_btn.setText(_translate("arcus_ui", "右"))
|
||||
81
record_system_v21/arcus_control_ui.ui
Normal file
81
record_system_v21/arcus_control_ui.ui
Normal file
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>arcus_ui</class>
|
||||
<widget class="QMainWindow" name="arcus_ui">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>354</width>
|
||||
<height>171</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QPushButton" name="left_btn">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>90</y>
|
||||
<width>61</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>左</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="right_btn">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>170</x>
|
||||
<y>90</y>
|
||||
<width>61</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>右</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="speed_lineEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>101</x>
|
||||
<y>10</y>
|
||||
<width>131</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QScrollBar" name="speed_ScrollBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>40</y>
|
||||
<width>131</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>354</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
47
record_system_v21/enter_window.py
Normal file
47
record_system_v21/enter_window.py
Normal file
@ -0,0 +1,47 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'enter_window.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.13.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_enter_Window(object):
|
||||
def setupUi(self, enter_Window):
|
||||
enter_Window.setObjectName("enter_Window")
|
||||
enter_Window.resize(651, 474)
|
||||
self.centralwidget = QtWidgets.QWidget(enter_Window)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.image_mode_bt = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.image_mode_bt.setGeometry(QtCore.QRect(200, 180, 111, 51))
|
||||
self.image_mode_bt.setObjectName("image_mode_bt")
|
||||
self.spectral_mode_bt = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.spectral_mode_bt.setGeometry(QtCore.QRect(360, 180, 111, 51))
|
||||
self.spectral_mode_bt.setObjectName("spectral_mode_bt")
|
||||
self.camstatus_tb = QtWidgets.QTextBrowser(self.centralwidget)
|
||||
self.camstatus_tb.setGeometry(QtCore.QRect(200, 240, 271, 81))
|
||||
self.camstatus_tb.setObjectName("camstatus_tb")
|
||||
enter_Window.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(enter_Window)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 651, 26))
|
||||
self.menubar.setObjectName("menubar")
|
||||
enter_Window.setMenuBar(self.menubar)
|
||||
self.statusbar = QtWidgets.QStatusBar(enter_Window)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
enter_Window.setStatusBar(self.statusbar)
|
||||
self.actionwew_e = QtWidgets.QAction(enter_Window)
|
||||
self.actionwew_e.setObjectName("actionwew_e")
|
||||
|
||||
self.retranslateUi(enter_Window)
|
||||
QtCore.QMetaObject.connectSlotsByName(enter_Window)
|
||||
|
||||
def retranslateUi(self, enter_Window):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
enter_Window.setWindowTitle(_translate("enter_Window", "主窗口"))
|
||||
self.image_mode_bt.setText(_translate("enter_Window", "影像模式"))
|
||||
self.spectral_mode_bt.setText(_translate("enter_Window", "光谱模式"))
|
||||
self.actionwew_e.setText(_translate("enter_Window", "wew e"))
|
||||
73
record_system_v21/enter_window.ui
Normal file
73
record_system_v21/enter_window.ui
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>enter_Window</class>
|
||||
<widget class="QMainWindow" name="enter_Window">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>474</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>主窗口</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QPushButton" name="image_mode_bt">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>200</x>
|
||||
<y>180</y>
|
||||
<width>111</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>影像模式</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="spectral_mode_bt">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>360</x>
|
||||
<y>180</y>
|
||||
<width>111</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>光谱模式</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTextBrowser" name="camstatus_tb">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>200</x>
|
||||
<y>240</y>
|
||||
<width>271</width>
|
||||
<height>81</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>26</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<action name="actionwew_e">
|
||||
<property name="text">
|
||||
<string>wew e</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
231
record_system_v21/image_Window.py
Normal file
231
record_system_v21/image_Window.py
Normal file
@ -0,0 +1,231 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'image_Window.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.13.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_image_Window(object):
|
||||
def setupUi(self, image_Window):
|
||||
image_Window.setObjectName("image_Window")
|
||||
image_Window.setEnabled(True)
|
||||
image_Window.resize(1181, 683)
|
||||
image_Window.setMouseTracking(False)
|
||||
image_Window.setAutoFillBackground(False)
|
||||
image_Window.setSizeGripEnabled(False)
|
||||
image_Window.setModal(False)
|
||||
self.verticalLayout_7 = QtWidgets.QVBoxLayout(image_Window)
|
||||
self.verticalLayout_7.setObjectName("verticalLayout_7")
|
||||
self.groupBox_5 = QtWidgets.QGroupBox(image_Window)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox_5.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox_5.setSizePolicy(sizePolicy)
|
||||
self.groupBox_5.setObjectName("groupBox_5")
|
||||
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_5)
|
||||
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_4.addItem(spacerItem)
|
||||
self.splitter_3 = QtWidgets.QSplitter(self.groupBox_5)
|
||||
self.splitter_3.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.splitter_3.setObjectName("splitter_3")
|
||||
self.layoutWidget = QtWidgets.QWidget(self.splitter_3)
|
||||
self.layoutWidget.setObjectName("layoutWidget")
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
|
||||
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.label = QtWidgets.QLabel(self.layoutWidget)
|
||||
self.label.setObjectName("label")
|
||||
self.verticalLayout.addWidget(self.label)
|
||||
self.label_4 = QtWidgets.QLabel(self.layoutWidget)
|
||||
self.label_4.setObjectName("label_4")
|
||||
self.verticalLayout.addWidget(self.label_4)
|
||||
self.layoutWidget1 = QtWidgets.QWidget(self.splitter_3)
|
||||
self.layoutWidget1.setObjectName("layoutWidget1")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget1)
|
||||
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.filepath_le = QtWidgets.QLineEdit(self.layoutWidget1)
|
||||
self.filepath_le.setObjectName("filepath_le")
|
||||
self.verticalLayout_2.addWidget(self.filepath_le)
|
||||
self.filename_le = QtWidgets.QLineEdit(self.layoutWidget1)
|
||||
self.filename_le.setObjectName("filename_le")
|
||||
self.verticalLayout_2.addWidget(self.filename_le)
|
||||
self.layoutWidget2 = QtWidgets.QWidget(self.splitter_3)
|
||||
self.layoutWidget2.setObjectName("layoutWidget2")
|
||||
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.layoutWidget2)
|
||||
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
||||
self.filepath_bt = QtWidgets.QPushButton(self.layoutWidget2)
|
||||
self.filepath_bt.setObjectName("filepath_bt")
|
||||
self.verticalLayout_3.addWidget(self.filepath_bt)
|
||||
self.save_bt = QtWidgets.QPushButton(self.layoutWidget2)
|
||||
self.save_bt.setObjectName("save_bt")
|
||||
self.verticalLayout_3.addWidget(self.save_bt)
|
||||
self.horizontalLayout_4.addWidget(self.splitter_3)
|
||||
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_4.addItem(spacerItem1)
|
||||
self.verticalLayout_7.addWidget(self.groupBox_5)
|
||||
self.splitter = QtWidgets.QSplitter(image_Window)
|
||||
self.splitter.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.splitter.setObjectName("splitter")
|
||||
self.groupBox_3 = QtWidgets.QGroupBox(self.splitter)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox_3.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox_3.setSizePolicy(sizePolicy)
|
||||
self.groupBox_3.setMinimumSize(QtCore.QSize(0, 0))
|
||||
self.groupBox_3.setMaximumSize(QtCore.QSize(2000, 16777215))
|
||||
self.groupBox_3.setObjectName("groupBox_3")
|
||||
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_3)
|
||||
self.verticalLayout_4.setObjectName("verticalLayout_4")
|
||||
self.groupBox = QtWidgets.QGroupBox(self.groupBox_3)
|
||||
self.groupBox.setObjectName("groupBox")
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox)
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.image_glo = QtWidgets.QGridLayout()
|
||||
self.image_glo.setObjectName("image_glo")
|
||||
self.horizontalLayout.addLayout(self.image_glo)
|
||||
self.verticalLayout_4.addWidget(self.groupBox)
|
||||
self.statu_tb = QtWidgets.QTextBrowser(self.groupBox_3)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.statu_tb.sizePolicy().hasHeightForWidth())
|
||||
self.statu_tb.setSizePolicy(sizePolicy)
|
||||
self.statu_tb.setMaximumSize(QtCore.QSize(8777215, 100))
|
||||
self.statu_tb.setReadOnly(True)
|
||||
self.statu_tb.setObjectName("statu_tb")
|
||||
self.verticalLayout_4.addWidget(self.statu_tb)
|
||||
self.groupBox_4 = QtWidgets.QGroupBox(self.splitter)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox_4.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox_4.setSizePolicy(sizePolicy)
|
||||
self.groupBox_4.setObjectName("groupBox_4")
|
||||
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.groupBox_4)
|
||||
self.verticalLayout_5.setObjectName("verticalLayout_5")
|
||||
self.groupBox_2 = QtWidgets.QGroupBox(self.groupBox_4)
|
||||
self.groupBox_2.setObjectName("groupBox_2")
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox_2)
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.focus_glo = QtWidgets.QGridLayout()
|
||||
self.focus_glo.setObjectName("focus_glo")
|
||||
self.horizontalLayout_2.addLayout(self.focus_glo)
|
||||
self.verticalLayout_5.addWidget(self.groupBox_2)
|
||||
self.groupBox_6 = QtWidgets.QGroupBox(self.groupBox_4)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox_6.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox_6.setSizePolicy(sizePolicy)
|
||||
self.groupBox_6.setObjectName("groupBox_6")
|
||||
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_6)
|
||||
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
|
||||
self.groupBox_7 = QtWidgets.QGroupBox(self.groupBox_6)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox_7.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox_7.setSizePolicy(sizePolicy)
|
||||
self.groupBox_7.setMaximumSize(QtCore.QSize(500, 500))
|
||||
self.groupBox_7.setObjectName("groupBox_7")
|
||||
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.groupBox_7)
|
||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout_6.setObjectName("verticalLayout_6")
|
||||
self.label_3 = QtWidgets.QLabel(self.groupBox_7)
|
||||
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_3.setObjectName("label_3")
|
||||
self.verticalLayout_6.addWidget(self.label_3)
|
||||
self.focus_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.focus_bt.setObjectName("focus_bt")
|
||||
self.verticalLayout_6.addWidget(self.focus_bt)
|
||||
self.exposureTime_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.exposureTime_bt.setObjectName("exposureTime_bt")
|
||||
self.verticalLayout_6.addWidget(self.exposureTime_bt)
|
||||
self.label_5 = QtWidgets.QLabel(self.groupBox_7)
|
||||
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_5.setObjectName("label_5")
|
||||
self.verticalLayout_6.addWidget(self.label_5)
|
||||
self.wb_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.wb_bt.setObjectName("wb_bt")
|
||||
self.verticalLayout_6.addWidget(self.wb_bt)
|
||||
self.label_2 = QtWidgets.QLabel(self.groupBox_7)
|
||||
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_2.setObjectName("label_2")
|
||||
self.verticalLayout_6.addWidget(self.label_2)
|
||||
self.record_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.record_bt.setObjectName("record_bt")
|
||||
self.verticalLayout_6.addWidget(self.record_bt)
|
||||
self.horizontalLayout_3.addLayout(self.verticalLayout_6)
|
||||
self.verticalLayout_8 = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout_8.setObjectName("verticalLayout_8")
|
||||
self.framerate_le = QtWidgets.QLineEdit(self.groupBox_7)
|
||||
self.framerate_le.setReadOnly(False)
|
||||
self.framerate_le.setObjectName("framerate_le")
|
||||
self.verticalLayout_8.addWidget(self.framerate_le)
|
||||
self.stop_focus_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.stop_focus_bt.setObjectName("stop_focus_bt")
|
||||
self.verticalLayout_8.addWidget(self.stop_focus_bt)
|
||||
self.exposureTime_le = QtWidgets.QLineEdit(self.groupBox_7)
|
||||
self.exposureTime_le.setObjectName("exposureTime_le")
|
||||
self.verticalLayout_8.addWidget(self.exposureTime_le)
|
||||
self.gain_le = QtWidgets.QLineEdit(self.groupBox_7)
|
||||
self.gain_le.setObjectName("gain_le")
|
||||
self.verticalLayout_8.addWidget(self.gain_le)
|
||||
self.dc_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.dc_bt.setObjectName("dc_bt")
|
||||
self.verticalLayout_8.addWidget(self.dc_bt)
|
||||
self.framenumber_le = QtWidgets.QLineEdit(self.groupBox_7)
|
||||
self.framenumber_le.setObjectName("framenumber_le")
|
||||
self.verticalLayout_8.addWidget(self.framenumber_le)
|
||||
self.motor_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.motor_bt.setObjectName("motor_bt")
|
||||
self.verticalLayout_8.addWidget(self.motor_bt)
|
||||
self.stop_record_bt = QtWidgets.QPushButton(self.groupBox_7)
|
||||
self.stop_record_bt.setObjectName("stop_record_bt")
|
||||
self.verticalLayout_8.addWidget(self.stop_record_bt)
|
||||
self.horizontalLayout_3.addLayout(self.verticalLayout_8)
|
||||
self.horizontalLayout_5.addWidget(self.groupBox_7)
|
||||
spacerItem2 = QtWidgets.QSpacerItem(261, 17, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_5.addItem(spacerItem2)
|
||||
self.verticalLayout_5.addWidget(self.groupBox_6)
|
||||
self.verticalLayout_7.addWidget(self.splitter)
|
||||
|
||||
self.retranslateUi(image_Window)
|
||||
QtCore.QMetaObject.connectSlotsByName(image_Window)
|
||||
|
||||
def retranslateUi(self, image_Window):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
image_Window.setWindowTitle(_translate("image_Window", "影像窗口"))
|
||||
self.groupBox_5.setTitle(_translate("image_Window", "GroupBox"))
|
||||
self.label.setText(_translate("image_Window", "保存路径"))
|
||||
self.label_4.setText(_translate("image_Window", "文件名"))
|
||||
self.filepath_bt.setText(_translate("image_Window", "浏览"))
|
||||
self.save_bt.setText(_translate("image_Window", "保存"))
|
||||
self.groupBox_3.setTitle(_translate("image_Window", "GroupBox"))
|
||||
self.groupBox.setTitle(_translate("image_Window", "图像"))
|
||||
self.groupBox_4.setTitle(_translate("image_Window", "GroupBox"))
|
||||
self.groupBox_2.setTitle(_translate("image_Window", "光谱"))
|
||||
self.groupBox_6.setTitle(_translate("image_Window", "GroupBox"))
|
||||
self.groupBox_7.setTitle(_translate("image_Window", "GroupBox"))
|
||||
self.label_3.setText(_translate("image_Window", "帧率"))
|
||||
self.focus_bt.setText(_translate("image_Window", "调焦"))
|
||||
self.exposureTime_bt.setText(_translate("image_Window", "曝光"))
|
||||
self.label_5.setText(_translate("image_Window", "gain"))
|
||||
self.wb_bt.setText(_translate("image_Window", "白板"))
|
||||
self.label_2.setText(_translate("image_Window", "帧数"))
|
||||
self.record_bt.setText(_translate("image_Window", "采集"))
|
||||
self.stop_focus_bt.setText(_translate("image_Window", "停止调焦"))
|
||||
self.dc_bt.setText(_translate("image_Window", "暗电流"))
|
||||
self.motor_bt.setText(_translate("image_Window", "马达"))
|
||||
self.stop_record_bt.setText(_translate("image_Window", "停止采集"))
|
||||
377
record_system_v21/image_Window.ui
Normal file
377
record_system_v21/image_Window.ui
Normal file
@ -0,0 +1,377 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>image_Window</class>
|
||||
<widget class="QDialog" name="image_Window">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1181</width>
|
||||
<height>683</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="mouseTracking">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>影像窗口</string>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizeGripEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="modal">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_5">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>保存路径</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>文件名</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="filepath_le"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="filename_le"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QPushButton" name="filepath_bt">
|
||||
<property name="text">
|
||||
<string>浏览</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="save_bt">
|
||||
<property name="text">
|
||||
<string>保存</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>2000</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>图像</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="image_glo"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTextBrowser" name="statu_tb">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>8777215</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>光谱</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="focus_glo"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_7">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>500</width>
|
||||
<height>500</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>帧率</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="focus_bt">
|
||||
<property name="text">
|
||||
<string>调焦</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="exposureTime_bt">
|
||||
<property name="text">
|
||||
<string>曝光</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>gain</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="wb_bt">
|
||||
<property name="text">
|
||||
<string>白板</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>帧数</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="record_bt">
|
||||
<property name="text">
|
||||
<string>采集</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="framerate_le">
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="stop_focus_bt">
|
||||
<property name="text">
|
||||
<string>停止调焦</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="exposureTime_le"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="gain_le"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="dc_bt">
|
||||
<property name="text">
|
||||
<string>暗电流</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="framenumber_le"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="motor_bt">
|
||||
<property name="text">
|
||||
<string>马达</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="stop_record_bt">
|
||||
<property name="text">
|
||||
<string>停止采集</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>261</width>
|
||||
<height>17</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
94
record_system_v21/spectral_Window.py
Normal file
94
record_system_v21/spectral_Window.py
Normal file
@ -0,0 +1,94 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'spectral_Window.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.13.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_spectral_Window(object):
|
||||
def setupUi(self, spectral_Window):
|
||||
spectral_Window.setObjectName("spectral_Window")
|
||||
spectral_Window.resize(792, 523)
|
||||
self.label = QtWidgets.QLabel(spectral_Window)
|
||||
self.label.setGeometry(QtCore.QRect(54, 10, 51, 20))
|
||||
self.label.setObjectName("label")
|
||||
self.filepath_le = QtWidgets.QLineEdit(spectral_Window)
|
||||
self.filepath_le.setGeometry(QtCore.QRect(131, 10, 261, 21))
|
||||
self.filepath_le.setObjectName("filepath_le")
|
||||
self.label_2 = QtWidgets.QLabel(spectral_Window)
|
||||
self.label_2.setGeometry(QtCore.QRect(54, 40, 41, 20))
|
||||
self.label_2.setObjectName("label_2")
|
||||
self.filename_le = QtWidgets.QLineEdit(spectral_Window)
|
||||
self.filename_le.setGeometry(QtCore.QRect(131, 40, 261, 21))
|
||||
self.filename_le.setObjectName("filename_le")
|
||||
self.filepath_bt = QtWidgets.QPushButton(spectral_Window)
|
||||
self.filepath_bt.setGeometry(QtCore.QRect(401, 10, 71, 21))
|
||||
self.filepath_bt.setObjectName("filepath_bt")
|
||||
self.statu_tb = QtWidgets.QTextBrowser(spectral_Window)
|
||||
self.statu_tb.setGeometry(QtCore.QRect(611, 210, 161, 301))
|
||||
self.statu_tb.setObjectName("statu_tb")
|
||||
self.tabWidget = QtWidgets.QTabWidget(spectral_Window)
|
||||
self.tabWidget.setGeometry(QtCore.QRect(10, 70, 591, 441))
|
||||
self.tabWidget.setObjectName("tabWidget")
|
||||
self.tab = QtWidgets.QWidget()
|
||||
self.tab.setObjectName("tab")
|
||||
self.gridLayoutWidget = QtWidgets.QWidget(self.tab)
|
||||
self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 581, 411))
|
||||
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
|
||||
self.spe_glo = QtWidgets.QGridLayout(self.gridLayoutWidget)
|
||||
self.spe_glo.setContentsMargins(0, 0, 0, 0)
|
||||
self.spe_glo.setObjectName("spe_glo")
|
||||
self.tabWidget.addTab(self.tab, "")
|
||||
self.tab_2 = QtWidgets.QWidget()
|
||||
self.tab_2.setObjectName("tab_2")
|
||||
self.gridLayoutWidget_2 = QtWidgets.QWidget(self.tab_2)
|
||||
self.gridLayoutWidget_2.setGeometry(QtCore.QRect(-1, -1, 581, 411))
|
||||
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
|
||||
self.align_glo = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
|
||||
self.align_glo.setContentsMargins(0, 0, 0, 0)
|
||||
self.align_glo.setObjectName("align_glo")
|
||||
self.tabWidget.addTab(self.tab_2, "")
|
||||
self.layoutWidget = QtWidgets.QWidget(spectral_Window)
|
||||
self.layoutWidget.setGeometry(QtCore.QRect(610, 90, 195, 135))
|
||||
self.layoutWidget.setObjectName("layoutWidget")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
|
||||
self.gridLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.align_bt = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.align_bt.setObjectName("align_bt")
|
||||
self.gridLayout.addWidget(self.align_bt, 0, 0, 1, 1)
|
||||
self.stop_align_bt = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.stop_align_bt.setObjectName("stop_align_bt")
|
||||
self.gridLayout.addWidget(self.stop_align_bt, 0, 1, 1, 1)
|
||||
self.wb_bt = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.wb_bt.setObjectName("wb_bt")
|
||||
self.gridLayout.addWidget(self.wb_bt, 1, 0, 1, 2)
|
||||
self.dc_bt = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.dc_bt.setObjectName("dc_bt")
|
||||
self.gridLayout.addWidget(self.dc_bt, 2, 0, 1, 2)
|
||||
self.record_bt = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.record_bt.setObjectName("record_bt")
|
||||
self.gridLayout.addWidget(self.record_bt, 3, 0, 1, 2)
|
||||
|
||||
self.retranslateUi(spectral_Window)
|
||||
self.tabWidget.setCurrentIndex(0)
|
||||
QtCore.QMetaObject.connectSlotsByName(spectral_Window)
|
||||
|
||||
def retranslateUi(self, spectral_Window):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
spectral_Window.setWindowTitle(_translate("spectral_Window", "光谱窗口"))
|
||||
self.label.setText(_translate("spectral_Window", "保存路径"))
|
||||
self.label_2.setText(_translate("spectral_Window", "文件名"))
|
||||
self.filepath_bt.setText(_translate("spectral_Window", "浏览"))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("spectral_Window", "spe"))
|
||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("spectral_Window", "align"))
|
||||
self.align_bt.setText(_translate("spectral_Window", "align"))
|
||||
self.stop_align_bt.setText(_translate("spectral_Window", "stop align"))
|
||||
self.wb_bt.setText(_translate("spectral_Window", "曝光/白板"))
|
||||
self.dc_bt.setText(_translate("spectral_Window", "暗电流"))
|
||||
self.record_bt.setText(_translate("spectral_Window", "采集"))
|
||||
180
record_system_v21/spectral_Window.ui
Normal file
180
record_system_v21/spectral_Window.ui
Normal file
@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>spectral_Window</class>
|
||||
<widget class="QDialog" name="spectral_Window">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>792</width>
|
||||
<height>523</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>光谱窗口</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>54</x>
|
||||
<y>10</y>
|
||||
<width>51</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>保存路径</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="filepath_le">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>131</x>
|
||||
<y>10</y>
|
||||
<width>261</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>54</x>
|
||||
<y>40</y>
|
||||
<width>41</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>文件名</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="filename_le">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>131</x>
|
||||
<y>40</y>
|
||||
<width>261</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="filepath_bt">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>401</x>
|
||||
<y>10</y>
|
||||
<width>71</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>浏览</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTextBrowser" name="statu_tb">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>611</x>
|
||||
<y>210</y>
|
||||
<width>161</width>
|
||||
<height>301</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>70</y>
|
||||
<width>591</width>
|
||||
<height>441</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>spe</string>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="gridLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>581</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="spe_glo"/>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>align</string>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="gridLayoutWidget_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
<width>581</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="align_glo"/>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>610</x>
|
||||
<y>90</y>
|
||||
<width>195</width>
|
||||
<height>135</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QPushButton" name="align_bt">
|
||||
<property name="text">
|
||||
<string>align</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="stop_align_bt">
|
||||
<property name="text">
|
||||
<string>stop align</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="wb_bt">
|
||||
<property name="text">
|
||||
<string>曝光/白板</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="dc_bt">
|
||||
<property name="text">
|
||||
<string>暗电流</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="record_bt">
|
||||
<property name="text">
|
||||
<string>采集</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
Reference in New Issue
Block a user