>

rgb_array 라는 3 개의 채널 (RGB)을 가진 행렬 배열이 있습니다 .

PyQt를 사용하여 표시하고 싶습니다.

스택 오버 플로우의 일부 오래된 게시물에 이어 다음 코드를 만들었습니다 ( gym-minigrid )

from PyQt5.QtGui import QPixmap
from PyQt5.QtGui import QImage
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QMainWindow, QWidget
class Window(QMainWindow):
    """
    Simple application window to render the environment into
    """
    def __init__(self):
        super().__init__()
        # Image label to display the rendering
        self.imgLabel = QLabel()
        # Create a main widget for the window
        mainWidget = QWidget(self)
        self.setCentralWidget(mainWidget)
        # Show the application window
        self.show()
        self.setFocus()
    def setPixmap(self, pixmap):
        self.imgLabel.setPixmap(pixmap)

rgb_array = ...  # my image
height, width, _ = rgb_array.shape
bytes_per_line = 3 * width
qt_img = QImage(rgb_array.data, width, height, bytes_per_line, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qt_img)
window = Window()
window.setPixmap(pixmap)

그러나 실행할 때마다 세그먼테이션 오류가 발생합니다. 어떤 아이디어? 감사합니다!

  • 답변 # 1

    시도 :

    from PyQt5.QtGui import QPixmap, QImage
    from PyQt5.QtWidgets import QMainWindow, QWidget, QLabel, QApplication, QGridLayout
    import cv2
    class Window(QMainWindow):
        """
        Simple application window to render the environment into
        """
        def __init__(self):
            super().__init__()
            # Image label to display the rendering
            self.imgLabel = QLabel()
            # Create a main widget for the window
            mainWidget = QWidget(self)
            self.setCentralWidget(mainWidget)
            layout = QGridLayout(mainWidget)        # +
            layout.addWidget(self.imgLabel)         # +
            # Show the application window
    #        self.show()
            self.setFocus()
    """
    rgb_array = 'im.png'    # my image
    height, width, _ = rgb_array.shape
    bytes_per_line = 3 * width
    qt_img = QImage(rgb_array.data, width, height, bytes_per_line, QImage.Format_RGB888)
    pixmap = QPixmap.fromImage(qt_img)
    window = Window()
    window.setPixmap(pixmap)
    """
    if __name__ == '__main__':
        import sys
        rgb_array = cv2.imread('Ok.png')
        rgb_array = cv2.cvtColor(rgb_array, cv2.COLOR_BGR2RGB)
        h, w, ch = rgb_array.shape
        bytesPerLine = ch * w
        qImg = QImage(rgb_array.data, w, h, bytesPerLine, QImage.Format_RGB888)
        app = QApplication(sys.argv)
        w = Window()
        w.imgLabel.setPixmap(QPixmap.fromImage(qImg))
        w.show()
        sys.exit(app.exec_())
    
    

관련 자료

  • 이전 javascript - 테이블의 필드에서 값을 반환
  • 다음 mysql - 이 간단한 COUNT 쿼리가이 별칭으로 작동하지 않는 이유는 무엇입니까? "열을 찾을 수 없습니다"