class Ui_Dialog(object): def setupUi(self, Dialog): self.camera =pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice()) self.camera.Open() Dialog.setObjectName("Dialog") Dialog.resize(500, 700) self.label_acA2440_35um = QtWidgets.QLabel(Dialog) self.label_acA2440_35um.setGeometry(QtCore.QRect(10, 10, 480, 498)) self.label_acA2440_35um.setAlignment(QtCore.Qt.AlignCenter) self.label_acA2440_35um.setObjectName("label_acA2440_35um") self.horizontalSlider_exptime = QtWidgets.QSlider(Dialog) self.horizontalSlider_exptime.setGeometry(QtCore.QRect(220, 559, 200, 20)) self.horizontalSlider_exptime.setMinimum(29) self.horizontalSlider_exptime.setMaximum(100000) self.horizontalSlider_exptime.setProperty("value", 5000) self.horizontalSlider_exptime.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider_exptime.setObjectName("horizontalSlider_exptime") self.spinBox_exptime = QtWidgets.QSpinBox(Dialog) self.spinBox_exptime.setGeometry(QtCore.QRect(140, 560, 70, 20)) self.spinBox_exptime.setMinimum(29) self.spinBox_exptime.setMaximum(100000) self.spinBox_exptime.setProperty("value", 5000) self.spinBox_exptime.setObjectName("spinBox_exptime") self.label_exptime = QtWidgets.QLabel(Dialog) self.label_exptime.setGeometry(QtCore.QRect(60, 560, 80, 20)) self.label_exptime.setObjectName("label_exptime") self.horizontalSlider_fps = QtWidgets.QSlider(Dialog) self.horizontalSlider_fps.setGeometry(QtCore.QRect(220, 600, 200, 20)) self.horizontalSlider_fps.setMaximum(40) self.horizontalSlider_fps.setProperty("value", 20) self.horizontalSlider_fps.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider_fps.setObjectName("horizontalSlider_fps") self.spinBox_fps = QtWidgets.QSpinBox(Dialog) self.spinBox_fps.setGeometry(QtCore.QRect(140, 601, 70, 20)) self.spinBox_fps.setMaximum(40) self.spinBox_fps.setSingleStep(1) self.spinBox_fps.setProperty("value", 20) self.spinBox_fps.setObjectName("spinBox_fps") self.label_fps = QtWidgets.QLabel(Dialog) self.label_fps.setGeometry(QtCore.QRect(60, 601, 80, 20)) self.label_fps.setObjectName("label_fps") self.horizontalSlider_gain = QtWidgets.QSlider(Dialog) self.horizontalSlider_gain.setGeometry(QtCore.QRect(220, 640, 200, 20)) self.horizontalSlider_gain.setMaximum(36) self.horizontalSlider_gain.setProperty("value", 0) self.horizontalSlider_gain.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider_gain.setObjectName("horizontalSlider_gain") self.spinBox_gain = QtWidgets.QSpinBox(Dialog) self.spinBox_gain.setGeometry(QtCore.QRect(140, 641, 70, 20)) self.spinBox_gain.setMaximum(36) self.spinBox_gain.setProperty("value", 0) self.spinBox_gain.setObjectName("spinBox_gain") self.label_gain = QtWidgets.QLabel(Dialog) self.label_gain.setGeometry(QtCore.QRect(60, 641, 80, 20)) self.label_gain.setObjectName("label_gain") self.retranslateUi(Dialog) self.spinBox_exptime.valueChanged['int'].connect(self.horizontalSlider_exptime.setValue) self.horizontalSlider_exptime.valueChanged['int'].connect(self.spinBox_exptime.setValue) self.horizontalSlider_fps.valueChanged['int'].connect(self.spinBox_fps.setValue) self.spinBox_fps.valueChanged['int'].connect(self.horizontalSlider_fps.setValue) self.horizontalSlider_gain.valueChanged['int'].connect(self.spinBox_gain.setValue) self.spinBox_gain.valueChanged['int'].connect(self.horizontalSlider_gain.setValue) self.horizontalSlider_exptime.valueChanged.connect(self.getvideo) self.horizontalSlider_fps.valueChanged.connect(self.getvideo) self.horizontalSlider_gain.valueChanged.connect(self.getvideo) QtCore.QMetaObject.connectSlotsByName(Dialog) self.timer = QTimer() self.timer.start(1000) # 单位ms self.timer.timeout.connect(self.getvideo) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "BaslerGUI")) self.label_acA2440_35um.setText(_translate("Dialog", "捕获图像")) self.label_exptime.setText(_translate("Dialog", "ExposureTime: ")) self.label_fps.setText(_translate("Dialog", "FrameRate: ")) self.label_gain.setText(_translate("Dialog", "Gain: ")) def setvalue(self): self.exptime = self.horizontalSlider_exptime.value() self.fps = self.horizontalSlider_fps.value() self.gain = self.horizontalSlider_gain.value() self.IMAGES_TO_GRAB = 1 self.camera.MaxNumBuffer = 5 self.camera.Gain.SetValue(self.gain) self.camera.ExposureTime = self.exptime self.camera.AcquisitionFrameRateEnable.SetValue(True) self.camera.AcquisitionFrameRate = self.fps self.resultfps = self.camera.ResultingFrameRate.GetValue() self.camera.PixelFormat = "Mono8" self.converter = pylon.ImageFormatConverter() self.converter.OutputPixelFormat = pylon.PixelType_BGR8packed self.converter.OutputBitAlignment = pylon.OutputBitAlignment_MsbAligned self.camera.StartGrabbingMax(self.IMAGES_TO_GRAB, pylon.GrabStrategy_LatestImageOnly) def getvideo(self): self.setvalue() while self.camera.IsGrabbing(): result = self.camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException) if result.GrabSucceeded(): print(self.resultfps) print("Mean Gray value:", numpy.mean(result.Array[0:20, 0:20])) img_bgr = self.converter.Convert(result) img_np = img_bgr.GetArray() # print(img_np) img = cv.cvtColor(img_np, cv.COLOR_BGR2RGB) video = QImage(img.data, img.shape[1], img.shape[0], img.shape[1] * 3, QImage.Format_RGB888) self.label_acA2440_35um.setPixmap(QPixmap.fromImage(video)) # 自适应label大小 self.label_acA2440_35um.setScaledContents(True) result.Release() else: print("Error: ", result.GetErrorCode(), result.GetErrorDescription()) except genicam.GenericException as e: # Error handling. print("An exception occurred.", e.GetDescription()) if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) baslergui = QtWidgets.QDialog() baslergui.move(10, 10) ui = Ui_Dialog() ui.setupUi(baslergui) baslergui.show() sys.exit(app.exec_()) 适用于 Basler GENICAM 相机 的带 Python GUI和C ++驱动程序的Fundus 相机 软件 一个简单的应用程序,可使用 BASLER 专用的 相机 驱动程序捕获眼底图像(或其他生物显微镜需求)。 Python 应用程序包括用于 相机 控制以及微控制器照明控制的简单GUI。 如果需要捕获不同的细节(例如,对于视网膜图像,患者姓名和左眼/右眼很重要),则可由最终用户修改程序GUI。 1. Basler 相机 +IAI电机组成机器视觉系统,实现电机旋转1° 相机 采集一张图像,完整项目代码。代码环境VS2022+ QT 5.15.8。 2. 相机 和电机可使用其他品牌,安装相应开发包即可。 3.Modbus协议应用。 2.在.pro文件中引用 INCLUDEPATH += $$PWD/include LIBS += -L$$PWD/lib/x64 -lGCBase_MD_VC120_v3_0_ Basler _pylon_v5_0 -lGenApi_MD_VC120_v3_0_ Basler _pylon_v5_0 -lPylonBase_MD_VC120_v5_0 -lPylon... Balser 相机 ​ 前段时间,因为项目需要,师傅让我用 Qt 写巴斯勒 相机 实时 画面 显示 ,网上找了好多资料,愚笨的我也没有弄明白该如何写,从 相机 的SDK中找到了用MFC写的例子,咱也没用过MFC呀,看不懂哎,最后师傅出马,写了一下, 相机 图像转换的位置师傅用他之前写的图像转换类,属于公司产品,我例子中就没用这个类,转而用opencv进行转换(网上找到的方法),本文后面会附上源码。 本程序的环境: 2.1pylon安装并导入 1).下载pypylon(下载地址) 2).在下载好的文件夹中,打开终端并source activate到要安装的虚拟环境里,使用pip install ***。 注:如果 1.7.2版本安装后,不能使用,尝试安装低版本的(例如1.6.0) from pypylon impor 在开始之前,先要介绍一下我的环境-->ubuntu13.10。其他的环境将在下面讲述如何搭建 PyQt5 的安装:在py qt 的官网上二进制包只有windows的,别的系统需要自己手动编译py qt 的源代码。我看了一下windows下 pyqt5 的安装包的列表,发现只有 PyQt5 -5.1.1-gpl-Py3.3- Qt 5.1.1*,让我误以为 pyqt5 只有 python 3的版本,后来才发现其实不是这样的=...