图像选点与可缩放平移视图组件(PySide6),与 D05 lidar-manager 选点 API 配合,支持坐标 round-trip;ZoomPanLabel、ImagePickerWindow、PickerSession,高内聚低耦合。
Project description
mini-image-picker
版本:v0.0.3
图像选点与可缩放平移视图组件(PySide6),高内聚低耦合。提供主窗口用 ZoomPanLabel、弹窗 ImagePickerWindow、PickerSession 状态与结果封装;可与 D05 lidar-manager 的图像更新与颜色过滤配合使用。
安装
pip install mini-image-picker
依赖
- Python >= 3.10
- numpy, opencv-python, PySide6
功能
- ZoomPanLabel:主窗口可缩放平移图像视图;
set_pixmap(pixmap, keep_view_state=True)更新图像并保留缩放/平移;map_to_image_coord(pos)将 label 坐标转为图像像素坐标(选 3D 点、颜色过滤取像素等)。视图状态:get_view_state()返回zoom_factor、pan_offset_x、pan_offset_y,set_view_state(...)恢复视图,便于保存/恢复而不依赖私有属性。多次选择只保留最后一次:仅维护一个活动点,点击即覆盖。配置zoom_pan_label.draw_confirmed_while_active=False时,有活动点只绘制活动点(只显示当前一个);可编程调用set_active_point(coord)/set_active_point(None)设置或清除活动点(如主窗口 3D 选点待确认十字)。 - ImagePickerWindow:弹窗内图像选点(左键选点、微调、Enter 确认),仅维护一个待定点,再次点击/微调即覆盖,多次选择只保留最后一次;缩放/平移/十字准星/标记等由 config 配置。
- PickerSession:持有 ImagePickerWindow,提供
get_state()、get_result()、get_summary()及信号points_changed、session_finished,避免与主程序状态冲突。 - 两种选点方式:主窗口选点:
label.set_pick_mode(True)后,在 ZoomPanLabel 上左键点击累计选点,通过label.get_picked_points()获取、label.clear_picked_points()清空,并连接信号point_picked(coord)。弹窗选点:通过 PickerSession 打开 ImagePickerWindow,选点结束后用session.get_result()获取。两套点列表独立,可分别获取。 - 光标样式:config 中
cursor_style可配置十字、中心点、外轮廓、文字四组件(有/无、大小、颜色、粗细、线型等)。弹窗选点时会按该配置绘制跟随光标。CursorShowcaseWindow 提供 4×5 种预设样式展示;CursorStyleEditorDialog 为单独 UI,可自定义光标样式并实时预览。 - Config:
get_default_config()返回全部可配置项默认值;初始化时传入config=my_config覆盖部分项即可。 - 坐标映射:包已导出
map_label_pos_to_image_coord(pos, pixmap, zoom, pan_offset, label_size),供无 label 实例时做坐标换算(如自定义控件、测试)。
与 D05 lidar-manager 的配合
- 图像更新:主程序用 ProjectionManager 的
project_points+render_to_image得到渲染图,转为 QPixmap 后调用label.set_pixmap(pixmap, keep_view_state=True)更新到 ZoomPanLabel;每次刷新均应使用keep_view_state=True,避免视图跳动。 - 颜色过滤:主程序在颜色过滤模式下临时接管 label 的点击(如替换
mousePressEvent),用 D07 的map_to_image_coord(pos)得到像素坐标再交给 lidar-manager;进入颜色过滤前若在 PnP 选点则 suspend_picking(),退出后 resume_picking(),保证互斥。
快速开始
from PySide6 import QtWidgets
from mini_image_picker import ZoomPanLabel, ImagePickerWindow, PickerSession, get_default_config, get_default_cursor_style, CursorShowcaseWindow, CursorStyleEditorDialog
import numpy as np
app = QtWidgets.QApplication([])
# 主窗口用视图(与 D05 渲染结果配合)
label = ZoomPanLabel(config=get_default_config())
label.set_pixmap(qt_pixmap, keep_view_state=True)
# 点击时取图像坐标: xy = label.map_to_image_coord(event.pos())
# 弹窗选点
image_bgr = np.zeros((1080, 1920, 3), dtype=np.uint8)
session = PickerSession(image_bgr, config=get_default_config())
session.points_changed.connect(lambda: print("points:", session.get_result()))
session.session_finished.connect(app.quit)
session.show()
app.exec()
print("result:", session.get_result())
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
mini_image_picker-0.0.3.tar.gz
(27.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mini_image_picker-0.0.3.tar.gz.
File metadata
- Download URL: mini_image_picker-0.0.3.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40c11ddea4c47a9cebf31d5ef61083ed5ef5aa961554249b2efa9aac8702b78f
|
|
| MD5 |
7a59bf7778d7a3e3a729e502489e0f36
|
|
| BLAKE2b-256 |
75c6e71778b6f7686a743ec536a59e218c8ed98d54dc3d776bf0c09e9b5e2cc7
|
File details
Details for the file mini_image_picker-0.0.3-py3-none-any.whl.
File metadata
- Download URL: mini_image_picker-0.0.3-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10f3f5f2ffb07ea52210168ec37086f8a09bf0cf85d77194458feeeb618e03fd
|
|
| MD5 |
7f57f2af244b610843be76cc0d48131d
|
|
| BLAKE2b-256 |
75e52ca3ecd82eab5e6e5c43a3b9859b2432b2e4059a797baffe133ece01c347
|