Я хочу нарисовать круг на изображении с помощью pyqt.
Однако, когда я это делаю, фактическое положение нарисованной области интереса, похоже, зависит от моего масштабирования. Поэтому я получаю разные смещения для функции mapFromScence при увеличении и уменьшении масштаба.
Как этого избежать?
Вот минимальный пример:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QSlider, QPushButton
from PyQt5.QtCore import Qt
import numpy as np
import sys
import pyqtgraph as pg
class VolumeViewer(QWidget):
def __init__(self):
super().__init__()
self.volume = np.random.random((10,256,256))
self.size = 1
vlayout = QVBoxLayout()
plot = pg.PlotItem()
self.imv = pg.ImageView(view=plot)
self.imv.setImage(self.volume)
self.imv.scene.sigMouseClicked.connect(self.imview_clicked)
vlayout.addWidget(self.imv)
self.setLayout(vlayout)
def imview_clicked(self, event):
if event.button() == Qt.RightButton:
event.ignore()
return
pos = self.imv.getImageItem().mapFromScene(event.pos())
print('pos here: ', pos)
item = self.imv.getImageItem()
pos.setX(pos.x())
pos.setY(pos.y()-self.size/2)
roi = pg.CircleROI(pos, self.size, parent=item, movable=False, removable=False, resizable=False, rotatable=False)
roi.setPen(255, 0, 0)
roi.removeHandle(0)
self.imv.addItem(roi)
def closeEvent(self, event):
super().closeEvent(event)
if __name__ == "__main__":
app = QApplication(sys.argv)
viewer = VolumeViewer()
viewer.show()
sys.exit(app.exec_())
Подробнее здесь: https://stackoverflow.com/questions/798 ... ds-on-zoom