[merger] save a merged image along with the merged detections
This commit is contained in:
parent
7b4c2f35eb
commit
3b76969d9b
@ -1,8 +1,8 @@
|
||||
import logging
|
||||
|
||||
from PySide6.QtCore import Qt, QThreadPool, Signal, Slot
|
||||
import pathlib
|
||||
from PySide6.QtCore import Qt, QThreadPool, Signal, Slot, QRect, QSize, QPoint
|
||||
from PySide6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene, QGraphicsLineItem, QSpacerItem, QProgressDialog, QFileDialog
|
||||
from PySide6.QtGui import QImage, QPixmap, QColor, QPen
|
||||
from PySide6.QtGui import QImage, QPixmap, QColor, QPen, QPainter
|
||||
|
||||
from fixtracks.utils.reader import ImageReader, DataFrameReader
|
||||
from fixtracks.utils.merger import Merger
|
||||
@ -11,23 +11,24 @@ from fixtracks.utils.merger import Merger
|
||||
class VideoPreview(QWidget):
|
||||
def __init__(self, left=True, parent=None):
|
||||
super().__init__(parent)
|
||||
self._image = None
|
||||
self._line_pen = QPen(QColor.fromString("red"), 4)
|
||||
self._image = None
|
||||
self._line_pen = QPen(QColor.fromString("red"), 4)
|
||||
self._view = QGraphicsView()
|
||||
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
self._scene = None
|
||||
self._pixmap = None
|
||||
self._pixmapitem = None
|
||||
self._left = left
|
||||
layout = QVBoxLayout()
|
||||
layout.addWidget(self._view)
|
||||
self.setLayout(layout)
|
||||
|
||||
def set_image(self, img):
|
||||
self._image = img
|
||||
self._scene = QGraphicsScene()
|
||||
self._pixmap = self._scene.addPixmap(QPixmap.fromImage(img))
|
||||
self._pixmapitem = self._scene.addPixmap(QPixmap.fromImage(img))
|
||||
self._view.setScene(self._scene)
|
||||
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
|
||||
image_rect = self._pixmap.boundingRect()
|
||||
image_rect = self._pixmapitem.boundingRect()
|
||||
start_x = image_rect.right() if self._left else image_rect.left()
|
||||
start_y = image_rect.top()
|
||||
end_y = image_rect.bottom()
|
||||
@ -36,16 +37,20 @@ class VideoPreview(QWidget):
|
||||
self._view.show()
|
||||
|
||||
def set_lineposition(self, position):
|
||||
image_rect = self._pixmap.boundingRect()
|
||||
image_rect = self._pixmapitem.boundingRect()
|
||||
for i in self._scene.items():
|
||||
if isinstance(i, QGraphicsLineItem):
|
||||
self._scene.removeItem(i)
|
||||
|
||||
start_x = image_rect.left() + position
|
||||
start_x = image_rect.left() + position
|
||||
start_y = image_rect.top()
|
||||
end_y = image_rect.bottom()
|
||||
self._scene.addLine(start_x, start_y, start_x, end_y, self._line_pen)
|
||||
|
||||
@property
|
||||
def image(self):
|
||||
return self._image
|
||||
|
||||
|
||||
class MergeDetections(QWidget):
|
||||
back = Signal()
|
||||
@ -310,6 +315,25 @@ class MergeDetections(QWidget):
|
||||
# preview_enabled = self.left_videocombo.currentIndex() > 0 and self.right_videocombo.currentIndex() > 0
|
||||
# self._mergePreviewBtn.setEnabled(preview_enabled)
|
||||
|
||||
def merge_images(self):
|
||||
limg = self.left_preview.image
|
||||
left_cut = self.left_posspinner.value()
|
||||
rimg = self.right_preview.image
|
||||
right_cut = self.right_posspinner.value()
|
||||
|
||||
lrect = QRect(0, 0, left_cut, limg.height())
|
||||
rrect = QRect(right_cut, 0, rimg.width() - right_cut, rimg.height())
|
||||
imgsize = QSize(lrect.width() + rrect.width(), rrect.height())
|
||||
lselection = limg.copy(lrect)
|
||||
rselection = rimg.copy(rrect)\
|
||||
|
||||
img = QImage(imgsize, limg.format())
|
||||
painter = QPainter(img)
|
||||
painter.drawImage(QPoint(0,0), lselection)
|
||||
painter.drawImage(QPoint(lrect.width(), 0), rselection)
|
||||
painter.end()
|
||||
return img
|
||||
|
||||
def on_save(self):
|
||||
logging.debug("Save merge results")
|
||||
if self._merger is not None:
|
||||
@ -321,6 +345,10 @@ class MergeDetections(QWidget):
|
||||
if not file_path.endswith(".pkl"):
|
||||
file_path += ".pkl"
|
||||
self._merger.save(file_path)
|
||||
p = pathlib.Path(file_path)
|
||||
img = self.merge_images()
|
||||
img_name = p.with_suffix(".png")
|
||||
img.save(str(img_name))
|
||||
else:
|
||||
logging.debug("Saving failed! Merger is None!")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user