关键词按天扣费靠谱吗?SEO扣费系统源码与排名监测设计
2026/10/31 4:50:55
图像配准是计算机视觉中的重要技术,特别是在多模态图像融合领域。本文将介绍如何使用 Python 和 PyQt6 开发一个功能完善的红外与可见光图像配准工具,支持手动调整、批量处理和游戏化键盘控制。
在实际应用中,我们经常需要将红外图像与可见光图像进行配准,以便进行图像融合、目标检测等后续处理。传统的配准工具往往操作复杂、学习成本高,因此我们开发了一个直观易用的配准工具。
这是本工具的一大亮点,采用类似游戏的键盘控制方式:
defkeyPressEvent(self,event):key=event.key()ifkeynotinself.pressed_keys:self.pressed_keys.add(key)iflen(self.pressed_keys)==1:self.key_repeat_timer.start(self.key_repeat_interval)特性:
除了键盘控制,还提供了可视化的方向键面板:
keyboard_group=QGroupBox("移动控制")keyboard_layout=QGridLayout()self.key_up_btn=QPushButton("↑")self.key_up_btn.pressed.connect(lambda:self.simulate_key_press(Qt.Key.Key_Up))self.key_up_btn.released.connect(lambda:self.simulate_key_release(Qt.Key.Key_Up))布局如下:
↑ ← ↓ →results目录defexport_images(self):# 统计已配准图像params_count=0forir_fileinself.ir_files:json_file=self.result_dir/f"{ir_file.stem}.json"ifjson_file.exists():params_count+=1# 只导出已配准的图像fori,ir_fileinenumerate(self.ir_files):json_file=self.result_dir/f"{ir_file.stem}.json"ifnotjson_file.exists():skip_count+=1continue# 读取参数并应用withopen(json_file,'r',encoding='utf-8')asf:params=json.load(f)dx=params.get('dx',0)dy=params.get('dy',0)angle=params.get('angle',0.0)scale_x=params.get('scale_x',1.0)scale_y=params.get('scale_y',1.0)特性:
results目录下的参数"下一张"按钮支持长按功能:
defnext_btn_pressed(self):self.next_btn_is_long_press=Falseself.next_btn_timer=QTimer()self.next_btn_timer.setSingleShot(True)self.next_btn_timer.timeout.connect(self.on_next_btn_long_press)self.next_btn_timer.start(500)# 500ms 长按阈值defon_next_btn_long_press(self):self.next_btn_is_long_press=Trueself.next_image()self.start_auto_switch()# 每 300ms 自动切换classImageCanvas(QWidget):defupdate_transformed_image(self):h,w=self.ir_image.shape[:2]center=(w//2,h//2)# 创建变换矩阵M=cv2.getRotationMatrix2D(center,self.angle,1.0)M[0,0]*=self.scale_x M[1,1]*=self.scale_y M[0,2]+=self.dx M[1,2]+=self.dy# 应用变换self.transformed_image=cv2.warpAffine(self.ir_image,M,(w,h))# 混合显示self.blended_image=cv2.addWeighted(self.vis_image,1-self.alpha,self.transformed_image,self.alpha,0)self.update()classImageCanvas(QWidget):parameters_changed=pyqtSignal(int,int,float,float,float)defmouseMoveEvent(self,event):ifself.dragging:dx=int(event.position().x()-self.last_pos.x())dy=int(event.position().y()-self.last_pos.y())self.dx+=dx self.dy+=dy self.last_pos=event.position()self.update_transformed_image()self.parameters_changed.emit(self.dx,self.dy,self.scale_x,self.scale_y,self.angle)classImageRegistrationWindow(QMainWindow):def__init__(self):self.image_canvas=ImageCanvas(self)self.image_canvas.parameters_changed.connect(self.update_parameter_labels)defupdate_parameter_labels(self,dx=None,dy=None,scale_x=None,scale_y=None,angle=None):ifdxisNoneordyisNoneorscale_xisNoneorscale_yisNoneorangleisNone:dx,dy,scale_x,scale_y,angle,alpha=\ self.image_canvas.get_parameters()self.dx_spin.setValue(dx)self.dy_spin.setValue(dy)self.scale_x_slider.setValue(int(scale_x*100))self.scale_y_slider.setValue(int(scale_y*100))self.angle_slider.setValue(int(angle))self.scale_x_label.setText(f"ScaleX:{scale_x:.2f}")self.scale_y_label.setText(f"ScaleY:{scale_y:.2f}")self.angle_label.setText(f"Angle:{angle:.1f}°")使用 PyInstaller 将程序打包为独立的 exe 文件:
a=Analysis(['image_registration_tool.py'],pathex=[],binaries=[],datas=[],hiddenimports=['cv2','numpy','PyQt6','PyQt6.QtCore','PyQt6.QtGui','PyQt6.QtWidgets',],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False,)exe=EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='ImageRegistrationTool',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=False,# 无控制台窗口icon=None,)pyinstaller image_registration_tool.spec打包后生成dist/ImageRegistrationTool.exe,文件大小约 84 MB,包含所有依赖库,可在任何 Windows 机器上直接运行。
创建以下目录结构:
JZ_data/ ├── images/ # 可见光图像 ├── imagesIR/ # 红外图像 └── results/ # 配准参数(自动创建)python image_registration_tool.py或直接运行打包后的 exe:
ImageRegistrationTool.exe完整代码已上传至 GitHub:
https://github.com/xy200303/image_registration_tool.git包含以下文件:
image_registration_tool.py- 主程序requirements.txt- 依赖列表image_registration_tool.spec- 打包配置build.bat- 自动打包脚本README.md- 项目说明本文介绍了一个基于 PyQt6 的红外与可见光图像配准工具的开发过程。通过游戏化的键盘控制、自动参数管理和批量处理功能,大大提升了配准效率。该工具已成功打包为独立 exe 文件,可在任何 Windows 机器上直接运行。
作者: xy200303
GitHub: https://github.com/xy200303/image_registration_tool.git
日期: 2026-01-23
如果觉得这篇文章对你有帮助,欢迎点赞、收藏和转发!有任何问题欢迎在评论区讨论。