2016-10-10 7 views
1

Я хотел бы отобразить изображение с использованием нескольких меток в графическом интерфейсе (Qt Designer). Файл изображения должен быть захвачен из текущего рабочего каталога и отображать на нем собственную метку при нажатии пользователем кнопки.Как отобразить изображение из текущего рабочего каталога в Python

Изображение может отображаться в метке_2, когда я жестко закодирован путь к каталогу изображений, но не для метки_1.

def capture_image(self): 

    cam = cv2.VideoCapture(0) 

    print('Execute_captureImage') 

    i = 1 
    while i <= int(self.qty_selected): 
     # while i < 2: 
     ret, frame = cam.read() 
     cv2.imshow('Please review image before capture', frame) 

     if not ret: 
      break 
     k = cv2.waitKey(1) 

     if k % 256 == 27: 
      # ESC pressed 
      print("Escape hit, closing...") 
      break 
     if k % 256 == 32: 
      # SPACE pressed 
      self.img_name = self.lotId + '_{}.jpeg'.format(i) 
      path = 'c:\\Users\\Desktop\\Python\\Testing' + '\\' + self.lotId + '\\' + self.img_name 
      print('CurrentImage = ' + path) 

      if not os.path.exists(path): 
       print('Not yet exist') 
       cv2.imwrite(
        os.path.join('c:\\Users\\Desktop\\Python\\Testing' + '\\' + self.lotId, 
           self.img_name), 
        frame) 
       print("{}".format(self.img_name)) 
       # i += 1 
       break 

      else: 
       print('Image already exist') 
       i += 1 

    cam.release() 
    cv2.destroyAllWindows() 



    def display_image(self): 

     label_vid01 = 'c:\\Users\\Desktop\\Python\\Testing' + '\\' + self.lotId + '\\' + self.img_name 
     label_vid02 = 'c:\\Users\\Desktop\\Python\\Testing' + '\\' + self.lotId + '\\' + self.img_name 
     # label_vid03 = 'c:/Users/Desktop/Python/Image/image3.jpg' 
     self.label_vid01.setScaledContents(True) 
     self.label_vid02.setScaledContents(True) 
     self.label_vid03.setScaledContents(True) 
     self.label_vid01.setPixmap(QtGui.QPixmap(label_vid01)) 
     self.label_vid02.setPixmap(QtGui.QPixmap(label_vid02)) 
     print(repr(label_vid01)) 
     print(os.path.exists(label_vid01)) 

Могу ли я узнать, где ошибка?

«self.lotId» - это текст ввода, основанный на пользовательском вводе.

label snapshot

+0

Что такое вывод 'print (repr (label_1))'? И каков вывод 'print (os.path.exists (label_1))'? – ekhumoro

+0

Я отредактировал путь для label_1 и вывод для печати (repr (label_1)) является 'c: \\ Users \\ Desktop \\ Python \\ Тестирование \\ ABCDE \\ ABCDE_2.jpeg'. И для вывода print (os.path.exists (label_1) есть «True». Теперь проблема заключается в том, как отобразить следующее следующее изображение на label_2? –

+0

Показать код функции, в которой вы устанавливаете изображение на этикетке. – ekhumoro

ответ

0

Демонстрационная ниже сценарий работает для меня на Windows XP. Если это также работает для вас, проблема должна быть в функции capture_image в вашем примере (которую я не могу проверить на данный момент).

import sys, os 
from PyQt4 import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     layout = QtGui.QVBoxLayout(self) 
     self.viewer = QtGui.QListWidget(self) 
     self.viewer.setViewMode(QtGui.QListView.IconMode) 
     self.viewer.setIconSize(QtCore.QSize(256, 256)) 
     self.viewer.setResizeMode(QtGui.QListView.Adjust) 
     self.viewer.setSpacing(10) 
     self.button = QtGui.QPushButton('Test', self) 
     self.button.clicked.connect(self.handleButton) 
     self.edit = QtGui.QLineEdit(self) 
     layout.addWidget(self.viewer) 
     layout.addWidget(self.edit) 
     layout.addWidget(self.button) 

    def handleButton(self): 
     self.viewer.clear() 
     name = self.edit.text() 
     for index in range(3): 
      pixmap = QtGui.QPixmap() 
      path = r'E:\Python\Testing\%s\%s_%d.jpg' % (name, name, index + 1) 
      print('load (%s) %r' % (pixmap.load(path), path)) 
      item = QtGui.QListWidgetItem(os.path.basename(path)) 
      item.setIcon(QtGui.QIcon(path)) 
      self.viewer.addItem(item) 

if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(800, 150, 650, 500) 
    window.show() 
    sys.exit(app.exec_()) 
+0

Этот демонстрационный скрипт wo rk отлично при испытании. Позвольте пояснить. Изображение, что у меня есть несколько изображений i.e 3 шт. С различными именами файлов (A_1.jpeg, A_2.jpeg, A_3.jpeg), и мне нужно отобразить на 3 разных ярлыках соответственно. Как захватить изображение из каталога и отображать без взаимодействия с пользователем? –

+0

@faizal_a. Я обновил свой пример кода. Подкаталог и префикс имени файла берутся из редактирования строки. Поэтому, если вы введете «ABC», файлы будут «ABC/ABC_1.jpg» и т. Д. – ekhumoro

+0

Это то, что я ищу. Отличная демонстрация !. Но как я мог отображать в виде сетки (5x5) с соответствующей меткой? Я почти завершен в своем проекте, и это последняя часть, с которой я застрял с 1 недели назад. –