PyQtGraph - Получение дочернего прямоугольника представления изображения

Опубликовано: 3 Апреля, 2022

В этой статье мы увидим, как мы можем получить дочерний прямоугольник объекта просмотра изображения в PyQTGaph. PyQtGraph - это библиотека графики и пользовательского интерфейса для Python, которая обеспечивает функциональные возможности, обычно требуемые в приложениях для проектирования и науки. Его основные цели - предоставить быструю интерактивную графику для отображения данных (графики, видео и т. Д.). Виджет, используемый для отображения и анализа данных изображения. Реализует множество функций, таких как отображение данных 2D и 3D изображений. Для 3D-данных отображается ползунок оси Z, позволяющий пользователю выбрать, какой кадр будет отображаться. Отображает гистограмму данных изображения с подвижной областью, определяющей уровни темноты / света, редактируемый градиент предоставляет таблицу поиска цвета. Представление изображения - это группа виджетов, например, он содержит объект представления, кнопку и полосы прокрутки, прямоугольник дочерних элементов является ограничивающим прямоугольником дочерних элементов представления изображения.
Мы можем создать представление изображения с помощью команды, приведенной ниже

 # создание объекта просмотра изображения pyqtgraph
imv = pg.ImageView ()

Syntax: ImageView(parent=None, name=’ImageView’, view=None, imageItem=None, levelMode=’mono’, *args)

Parameters:

  • parent (QWidget): Specifies the parent widget to which this ImageView will belong. If None, then the ImageView is created with no parent.
  • name (str): The name used to register both the internal ViewBox and the PlotItem used to display ROI data.
  • view (ViewBox or PlotItem): If specified, this will be used as the display area that contains the displayed image.
  • imageItem (ImageItem): If specified, this object will be used to display the image. Must be an instance of ImageItem or other compatible object.
  • levelMode: specifies the *levelMode* argument

Returns: Object of class ImageView

Для этого мы используем метод childrenRect () с объектом просмотра изображения.

Syntax : imv.childrenRect()
Argument : It takes no argument
Return : It returns QRect object 
 

Below is the implementation 

Python3

# importing Qt widgets
from PyQt5.QtWidgets import *
  
# importing system
import sys
  
# importing numpy as np
import numpy as np
  
# importing pyqtgraph as pg
import pyqtgraph as pg
from PyQt5.QtGui import *
from PyQt5.QtCore import *
  
  
# Image View class
class ImageView(pg.ImageView):
  
    # constructor which inherit original
    # ImageView
    def __init__(self, *args, **kwargs):
        pg.ImageView.__init__(self, *args, **kwargs)
  
class Window(QMainWindow):
  
    def __init__(self):
        super().__init__()
  
        # setting title
        self.setWindowTitle("PyQtGraph")
  
        # setting geometry
        self.setGeometry(100, 100, 600, 500)
  
  
        # icon
        icon = QIcon("skin.png")
  
        # setting icon to the window
        self.setWindowIcon(icon)
  
        # calling method
        self.UiComponents()
  
        # showing all the widgets
        self.show()
  
        # setting fixed size of window
        #self.setFixedSize(QSize(600, 500))
  
    # method for components
    def UiComponents(self):
  
        # creating a widget object
        widget = QWidget()
  
        # creating a label
        label = QLabel("Geeksforgeeks Image View")
  
        # setting minimum width
        label.setMinimumWidth(130)
  
        # making label do word wrap
        label.setWordWrap(True)
  
        # setting configuration options
        pg.setConfigOptions(antialias=True)
  
        # creating image view view object
        imv = ImageView()
  
        # Create random 3D data set with noisy signals
        img = pg.gaussianFilter(np.random.normal(size=(200, 200)), (5, 5)) * 20 + 100
  
        # setting new axis to image
        img = img[np.newaxis, :, :]
  
        # decay data
        decay = np.exp(-np.linspace(0, 0.3, 100))[:, np.newaxis, np.newaxis]
  
        # random data
        data = np.random.normal(size=(100, 200, 200))
        data += img * decay
        data += 2
  
        # adding time-varying signal
        sig = np.zeros(data.shape[0])
        sig[30:] += np.exp(-np.linspace(1, 10, 70))
        sig[40:] += np.exp(-np.linspace(1, 10, 60))
        sig[70:] += np.exp(-np.linspace(1, 10, 30))
  
        sig = sig[:, np.newaxis, np.newaxis] * 3
        data[:, 50:60, 30:40] += sig
  
        # setting image to image view
        # Displaying the data and assign each frame a time value from 1.0 to 3.0
        imv.setImage(data, xvals=np.linspace(1., 3., data.shape[0]))
  
        ## Set a custom color map
        colors = [
            (0, 0, 0),
            (4, 5, 61),
            (84, 42, 55),
            (15, 87, 60),
            (208, 17, 141),
            (255, 255, 255)
        ]
  
        # color map
        cmap = pg.ColorMap(pos=np.linspace(0.0, 1.0, 6), color=colors)
  
        # setting color map to the image view
        imv.setColorMap(cmap)
  
        # Creating a grid layout
        layout = QGridLayout()
  
        # minimum width value of the label
        label.setFixedWidth(130)
  
        # setting this layout to the widget
        widget.setLayout(layout)
  
        # adding label in the layout
        layout.addWidget(label, 1, 0)
  
        # plot window goes on right side, spanning 3 rows
        layout.addWidget(imv, 0, 1, 3, 1)
  
        # setting this widget as central widget of the main widow
        self.setCentralWidget(widget)
  
        # getting children rectangle of image view 
        value = imv.childrenRect()
          
        # setting text to the label
        label.setText("Children Rectangle : " + str(value))
  
  
  
# create pyqt5 app
App = QApplication(sys.argv)
  
# create the instance of our Window
window = Window()
  
# start the app
sys.exit(App.exec())

Выход :

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.