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的版本,后来才发现其实不是这样的=...