Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.11 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. #Ker gama korekcije nisem uspobil ni nujno da bo pravilno delala, histogram se updata ko se slika spremeni če je bil odpt v meniju. Podpira slike v vseh formatih ( verjetno )
  3. import cv2
  4. import numpy
  5. from PyQt4 import QtCore, QtGui
  6. import matplotlib.pyplot as plt
  7.  
  8. try:
  9. _fromUtf8 = QtCore.QString.fromUtf8
  10. except AttributeError:
  11. def _fromUtf8(s):
  12. return s
  13.  
  14. try:
  15. _encoding = QtGui.QApplication.UnicodeUTF8
  16. def _translate(context, text, disambig):
  17. return QtGui.QApplication.translate(context, text, disambig, _encoding)
  18. except AttributeError:
  19. def _translate(context, text, disambig):
  20. return QtGui.QApplication.translate(context, text, disambig)
  21.  
  22. gammaMin = 60.0/255
  23. gammaMax = 90.0/255
  24. gammaSub = gammaMax - gammaMin
  25.  
  26.  
  27. def gamma_correction(v):
  28. return int((v - gammaMin) / gammaSub)
  29.  
  30.  
  31. class Ui_MainWindow(object):
  32. def setupUi(self, MainWindow):
  33. self.color = (255, 255, 255)
  34. self.previmg = None
  35. self.prevformat = None
  36. self.img1 = None
  37. self.img1_format = None
  38. self.gammaMax = 0
  39. self.opened = False
  40.  
  41. fig = plt.figure()
  42. self.ax1 = fig.add_subplot(311)
  43. self.ax1.autoscale_view(True, True, True)
  44. self.Ln1 = self.ax1.bar(range(0, 255), numpy.zeros(255), color='b', edgecolor='none')
  45. self.ax1.set_ylim([0, 10])
  46. self.ax1.set_xlim([0, 255])
  47. self.ax1.set_title("Prva barva")
  48. self.ax2 = fig.add_subplot(312)
  49. self.ax2.autoscale_view(True, True, True)
  50. self.Ln2 = self.ax2.bar(range(0, 255), numpy.zeros(255), color='b', edgecolor='none')
  51. self.ax2.set_xlim([0, 255])
  52. self.ax2.set_ylim([0, 10])
  53. self.ax2.set_title("Druga barva")
  54. self.ax3 = fig.add_subplot(313)
  55. self.ax3.autoscale_view(True, True, True)
  56. self.Ln3 = self.ax3.bar(range(0, 255), numpy.zeros(255), color='b', edgecolor='none')
  57. self.ax3.set_xlim([0, 255])
  58. self.ax3.set_ylim([0, 10])
  59. self.ax3.set_title("Tretja barva")
  60. plt.ion()
  61.  
  62.  
  63.  
  64. MainWindow.setObjectName(_fromUtf8("MainWindow"))
  65. MainWindow.resize(700, 525)
  66. self.centralwidget = QtGui.QWidget(MainWindow)
  67. self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
  68. self.label = QtGui.QLabel(self.centralwidget)
  69. self.label.setGeometry(QtCore.QRect(0, 0, 700, 500))
  70. self.label.setText(_fromUtf8(""))
  71. self.label.setObjectName(_fromUtf8("label"))
  72. MainWindow.setCentralWidget(self.centralwidget)
  73. self.menubar = QtGui.QMenuBar(MainWindow)
  74. self.menubar.setGeometry(QtCore.QRect(0, 0, 1400, 25))
  75. self.menubar.setObjectName(_fromUtf8("menubar"))
  76. self.menuFile = QtGui.QMenu(self.menubar)
  77. self.menuFile.setObjectName(_fromUtf8("menuFile"))
  78. self.menuImage = QtGui.QMenu(self.menubar)
  79. self.menuImage.setObjectName(_fromUtf8("menuImage"))
  80. MainWindow.setMenuBar(self.menubar)
  81. self.actionOpen = QtGui.QAction(MainWindow)
  82. self.actionOpen.setObjectName(_fromUtf8("actionOpen"))
  83. self.actionOpen_from_camera = QtGui.QAction(MainWindow)
  84. self.actionOpen_from_camera.setObjectName(_fromUtf8("actionOpen_from_camera"))
  85. self.actionGama_correction = QtGui.QAction(MainWindow)
  86. self.actionGama_correction.setObjectName(_fromUtf8("actionGama_correction"))
  87. self.actionGray = QtGui.QAction(MainWindow)
  88. self.actionGray.setObjectName(_fromUtf8("actionGray"))
  89. self.actionBack = QtGui.QAction(MainWindow)
  90. self.actionBack.setObjectName(_fromUtf8("actionBack"))
  91. self.actionHistogram = QtGui.QAction(MainWindow)
  92. self.actionHistogram.setObjectName(_fromUtf8("actionBack"))
  93.  
  94. self.menuFile.addAction(self.actionOpen)
  95. self.menuFile.addAction(self.actionOpen_from_camera)
  96. self.menuImage.addAction(self.actionGama_correction)
  97. self.menuImage.addAction(self.actionGray)
  98. self.menuImage.addAction(self.actionBack)
  99. self.menuImage.addAction(self.actionHistogram)
  100. self.menubar.addAction(self.menuFile.menuAction())
  101. self.menubar.addAction(self.menuImage.menuAction())
  102.  
  103. self.actionOpen_from_camera.triggered.connect(self.camera)
  104. self.actionOpen.triggered.connect(self.file)
  105. self.actionGama_correction.triggered.connect(self.gama)
  106. self.actionGray.triggered.connect(self.gray)
  107. self.actionBack.triggered.connect(self.back)
  108. self.actionHistogram.triggered.connect(self.clickHisto)
  109.  
  110. self.retranslateUi(MainWindow)
  111. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  112.  
  113. def clickHisto(self):
  114. if not self.opened:
  115. plt.show()
  116. self.actionHistogram.setText("Close the histogram")
  117. if self.opened:
  118. plt.close()
  119. self.actionHistogram.setText("Open the histogram")
  120. self.opened = not self.opened
  121. self.histogram()
  122.  
  123. def histogram(self):
  124. if self.opened:
  125. try:
  126. for i in range(self.img1.shape[2]):
  127. hist, bins = numpy.histogram([[y[i] for y in x] for x in self.img1], 256, [0, 256])
  128. for x in range(len(self.Ln1)):
  129. getattr(self, "Ln"+str(i+1))[x].set_height(hist[x])
  130. getattr(self, "ax"+str(i+1)).set_ylim([0, max(hist)])
  131. plt.draw()
  132. plt.pause(0.05)
  133. except:
  134. hist, bins = numpy.histogram([x[0] for x in self.img1], 256, [0, 256])
  135. for x in range(len(self.Ln1)):
  136. getattr(self, "Ln" + str(1))[x].set_height(hist[x])
  137. getattr(self, "ax" + str(1)).set_ylim([0, max(hist)])
  138. plt.draw()
  139. plt.pause(0.05)
  140.  
  141. def camera(self):
  142. cap = cv2.VideoCapture(0)
  143. ret, frame = cap.read()
  144. cap.release()
  145. self.img1 = frame
  146. MainWindow.resize(self.img1.shape[1], self.img1.shape[0])
  147. self.label.setGeometry(QtCore.QRect(0, 0, self.img1.shape[1], self.img1.shape[0]))
  148. image = QtGui.QImage(self.img1, self.img1.shape[1], self.img1.shape[0], self.img1.shape[1] * 3, QtGui.QImage.Format_RGB888)
  149. pix = QtGui.QPixmap(image)
  150. self.label.setPixmap(pix)
  151. self.label.show()
  152. self.histogram()
  153.  
  154. def file(self):
  155. fname = str(QtGui.QFileDialog.getOpenFileName(None, 'Open image', '~', "Image files (*.jpg *.png *.gif)"))
  156. if "" != fname:
  157. cvImage = cv2.imread(fname)
  158.  
  159. MainWindow.resize(cvImage.shape[1], cvImage.shape[0])
  160. self.label.setGeometry(QtCore.QRect(0, 0, cvImage.shape[1], cvImage.shape[0]))
  161.  
  162. cv2.cvtColor(cvImage, cv2.COLOR_BGR2RGB, cvImage)
  163. image = QtGui.QImage(cvImage, cvImage.shape[1], cvImage.shape[0], cvImage.shape[1] * cvImage.shape[2], QtGui.QImage.Format_RGB888)
  164. pix = QtGui.QPixmap(image)
  165. self.label.setPixmap(pix)
  166. self.label.show()
  167. self.img1 = cvImage
  168. self.prevformat = QtGui.QImage.Format_Indexed8
  169. self.histogram()
  170.  
  171. def gray(self):
  172. self.previmg = self.img1
  173. self.prevformat = QtGui.QImage.Format_RGB888
  174. self.img1 = cv2.cvtColor(self.img1, cv2.COLOR_RGB2GRAY)
  175. image = QtGui.QImage(self.img1, self.img1.shape[1], self.img1.shape[0], 1*self.img1.shape[1], QtGui.QImage.Format_Indexed8)
  176. pix = QtGui.QPixmap(image)
  177. self.label.setPixmap(pix)
  178. self.label.show()
  179. self.histogram()
  180.  
  181. def gama(self):
  182. print self.img1
  183. vectorFunction = numpy.vectorize(gamma_correction)
  184. self.img1 = vectorFunction(self.img1)
  185. self.img1 = numpy.clip(self.img1, 0, 255)
  186.  
  187. image = QtGui.QImage(self.img1, self.img1.shape[1], self.img1.shape[0], 3*self.img1.shape[1], QtGui.QImage.Format_RGB888)
  188. pix = QtGui.QPixmap(image)
  189. self.label.setPixmap(pix)
  190. self.label.show()
  191. self.histogram()
  192.  
  193. def back(self):
  194. if self.previmg is not None:
  195. self.previmg, self.img1 = self.img1, self.previmg
  196. if self.prevformat == QtGui.QImage.Format_RGB888:
  197. n = 3
  198. else:
  199. n = 1
  200. image = QtGui.QImage(self.img1, self.img1.shape[1], self.img1.shape[0], self.img1.shape[1]*n, self.prevformat)
  201. pix = QtGui.QPixmap(image)
  202. self.label.setPixmap(pix)
  203. self.label.show()
  204.  
  205. if n == 3:
  206. self.prevformat = QtGui.QImage.Format_Indexed8
  207. if n == 1:
  208. self.prevformat = QtGui.QImage.Format_RGB888
  209. self.histogram()
  210.  
  211. def retranslateUi(self, MainWindow):
  212. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
  213. self.menuFile.setTitle(_translate("MainWindow", "File", None))
  214. self.menuImage.setTitle(_translate("MainWindow", "Image", None))
  215. self.actionOpen.setText(_translate("MainWindow", "Open", None))
  216. self.actionOpen.setShortcut(_translate("MainWindow", "Ctrl+O", None))
  217. self.actionOpen_from_camera.setText(_translate("MainWindow", "Open from camera", None))
  218. self.actionOpen_from_camera.setShortcut(_translate("MainWindow", "Ctrl+I", None))
  219. self.actionGama_correction.setText(_translate("MainWindow", "Gama correction", None))
  220. self.actionGray.setText(_translate("MainWindow", "Convert to Gray", None))
  221. self.actionGama_correction.setShortcut(_translate("MainWindow", "Ctrl+G", None))
  222. self.actionBack.setText(_translate("MainWindow", "Undo image transformation", None))
  223. self.actionBack.setShortcut(_translate("MainWindow", "Ctrl+Z", None))
  224. self.actionHistogram.setText(_translate("MainWindow", "Show histogram", None))
  225. self.actionHistogram.setShortcut(_translate("MainWindow", "Ctrl+H", None))
  226.  
  227. if __name__ == "__main__":
  228. import sys
  229. app = QtGui.QApplication(sys.argv)
  230. MainWindow = QtGui.QMainWindow()
  231. ui = Ui_MainWindow()
  232. ui.setupUi(MainWindow)
  233. MainWindow.show()
  234. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement