# -*- coding: utf-8 -*-
from PyQt4 import QtGui, QtCore
import Image
import ImageQt
import opencv
from opencv import highgui
# kamera yakalayıcı...
camera = highgui.cvCreateCameraCapture(0)
# kamera işlemimiz sürekli olarak ekrana görüntüyü basıyor...
class camThread(QtCore.QThread):
def run(self):
while True:
# görüntüleri basarken her aralıkda 60ms bekliyoruz, buda 60fps demek...
# eğer sizde görüntü yavaş olursa yani fps yi düşürün...
self.msleep(60)
# görüntüyü alıyoruz...
self.image = highgui.cvQueryFrame(camera)
# resim sinyalini yayıyoruz ve gidecek fonksiyona self.image değişkenini,
# gönderiyoruz...
self.emit(QtCore.SIGNAL("image"), (self.image))
class camoruxWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(650, 450)
self.camThread = camThread()
self.showLabel = QtGui.QLabel(self)
self.showLabel.resize(640, 480)
# camThread den gelen sinyali alıyoruz ve self.showImage ye bağlıyoruz...
self.connect(self.camThread, QtCore.SIGNAL("image"), self.showImage)
self.camThread.start()
self.button = QtGui.QPushButton(self)
self.button.setText(u"Resim çek")
self.connect(self.button, QtCore.SIGNAL("clicked(bool)"), self.cek)
def cek(self):
# flash
self.flash = QtGui.QWidget()
self.flash.setStyleSheet("background-color: rgb(255, 255, 255);")
self.flash.showFullScreen()
# resim çekiliyor...
i = highgui.cvQueryFrame(camera)
opencv.adaptors.Ipl2PIL(i).save("deneme.png")
# flash kapanıyor
self.flash.close()
def showImage(self, image):
# burada: gelen resmi ImageQt ile QLabel in istediği şekile dönüştürüyoruz...
self.image = ImageQt.ImageQt(opencv.adaptors.Ipl2PIL(image).transpose(Image.FLIP_LEFT_RIGHT))
# ve gösteriyoruz...
self.showLabel.setPixmap(QtGui.QPixmap.fromImage(self.image))
app = QtGui.QApplication([])
mw = camoruxWindow()
mw.show()
app.exec_()
Dikkat etmeniz gereken nokta şu:
camThread görüntüyü gösterirken 60ms bekliyor yani 60fps ile görüntü gösteriliyor, sizde eğer görüntü yavaş olursa fps yi düşürmeniz gerekiyor demektir. 30-40 fps arası deneyin…