2015-02-02 12 views
11

Bir görüntü üzerinde çok fazla işlem yapmam gerekiyor. Ben de OpenCV kullandım. OpenCV görüntü işlemede çok verimlidir, ancak uygun bir GUI sunmak için çok iyi değildir. Bu yüzden görüntümü işlemek için özel bir GUI ve OpenCV çizmek için PyQt kullanmaya karar verdim.Basit bir GUI oluşturmak için PyCt ile OpenCV nasıl birleştirilir?

Doğrudan belgelerden aldığınız çok basit bir program oluşturdum. Bir jpg resmini okudum vetuşa basarak png biçiminde kaydediyorum.

Amacım, PyQt kullanarak aynı işlemi gerçekleştirmek için s anahtarını bir tuşla değiştirmektir. Ayrıca, PyQt tarafından görüntülenen pencerenin OpenCV ile aynı davranışı göstermesini istiyorum: temel olarak, imshow() işlevi görüntü boyutuna uyan bir pencere görüntüler. İşte

benim OpenCV basit kodudur:

import numpy 
import cv2 

class LoadImage: 
    def loadImage(self): 
     img = cv2.imread('photo.jpg') 
     cv2.imshow('Image on a window',img) 
     k = cv2.waitKey(0) 
     if k == 27: 
      cv2.destroyAllWindows() 
     elif k == ord('s'): 
      cv2.imwrite('photopng.png',img) 
      cv2.destroyAllWindows() 

if __name__=="__main__": 
    LI=LoadImage() 
    LI.loadImage() 

Çıktı:

import sys 
from PyQt4 import QtGui 

class DrawWindow: 
    def drawWindow(self): 
     app=QtGui.QApplication(sys.argv) 
     w=QtGui.QWidget() 
     #w.resize(250,250) 
     w.move(300,300) 
     w.setWindowTitle("Simple Window") 
     w.show() 

     sys.exit(app.exec_()) 

if __name__=="__main__": 
    DW=DrawWindow() 
    DW.drawWindow() 

Nasıl: Burada enter image description here

basit bir pencere çizmek için basit PyQT kodudur Hedefime ulaşmak için 2 kodu karıştırıyorum?

cevap

9

Gönderinizde bazı kodlar değiştirildi, görüntü oluşturmak için Opencv kullanmıyordum, yerine QPixmap kullanıyorum. daha sonra kullanıcı girişini yakalamak için KeyPressEvent kullanın.

# -*- coding: utf-8 -*- 


import numpy 
import cv2 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 


class MyDialog(QDialog): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 

     self.cvImage = cv2.imread(r'cat.jpg') 
     height, width, byteValue = self.cvImage.shape 
     byteValue = byteValue * width 

     cv2.cvtColor(self.cvImage, cv2.COLOR_BGR2RGB, self.cvImage) 

     self.mQImage = QImage(self.cvImage, width, height, byteValue, QImage.Format_RGB888) 

    def paintEvent(self, QPaintEvent): 
     painter = QPainter() 
     painter.begin(self) 
     painter.drawImage(0, 0, self.mQImage) 
     painter.end() 

    def keyPressEvent(self, QKeyEvent): 
     super(MyDialog, self).keyPressEvent(QKeyEvent) 
     if 's' == QKeyEvent.text(): 
      cv2.imwrite("cat2.png", self.cvImage) 
     else: 
      app.exit(1) 


if __name__=="__main__": 
    import sys 
    app = QApplication(sys.argv) 
    w = MyDialog() 
    w.resize(600, 400) 
    w.show() 
    app.exec_() 
+0

Denediğiniz için teşekkür ederiz. İlk olarak, görüntü işleme için OpenCV kullanmam gerekiyor. İkincisi, kodunuzu derlerken birkaç hatam var. Ancak çaba için +1. –

+0

Bu Kod doğru görünüyor. İşlem, OpenCV'de (örneğin, cv2.cvtColor'a bakın) ve sadece görüntüleme, Qt (QPixmap) kullanılarak ele alınır. Çok fazla kapalı senaryoda aynı şeyi yapıyorum. Görüntünüzü cv'den qt'ye dönüştürürken dikkatli olun (dönüştürücüler için web'de arama yapın)! – Mailerdaimon

İlgili konular