【问题标题】:How to save an input image into a variable and call it in another function?如何将输入图像保存到变量中并在另一个函数中调用它?
【发布时间】:2021-05-09 08:09:54
【问题描述】:

我编写了一个代码来比较两个图像,它工作正常。现在我想开发一个 UI 来浏览这两个获取两个图像作为输入,然后我的比较代码应该可以工作并给出结果。 下面是我的代码二,从我的本地驱动器中浏览两个不同的图像。

import PySimpleGUI as sg
import cv2
import numpy as np

supportedextensions = ['jpg','png']
layoutprefile = [
    [sg.Text('Select two images to proceed')],
    [sg.Text('Origi Image'), sg.Input(), sg.FileBrowse()],
    [sg.Text('Input Image'), sg.Input(), sg.FileBrowse()],
    # *list1,
    [sg.Output(size=(61, 5))],
    [sg.Submit('Compare'), sg.Cancel('Cancel')]
    ]
window = sg.Window('Image Compare', layoutprefile)
while True:    
    event, values = window.read()
    if event in (None, 'Exit', 'Cancel'):
        secondwindow = 0
        break
    elif event == 'Compare':

现在我下面的代码是两个比较两个图像

# Original image
      image = 
      gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      histogram = cv2.calcHist([gray_image], [0], 
                                 None, [256], [0, 256])

           
        # Input1 image
      image1 = 
      gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
      histogram1 = cv2.calcHist([gray_image1], [0], 
                                  None, [256], [0, 256])

   
  
   
c1 = 0
   

i = 0
while i<len(histogram) and i<len(histogram1):
    c1+=(histogram[i]-histogram1[i])**2
    i+= 1
c1 = c1**(1 / 2)
   
  

if(c1==0):
    print("Input image is matching with original image.")
elif(c1>0 or c1<0):
   print("Input image is not matching with original image")

imS = cv2.resize(image, (250, 200))
imS1 = cv2.resize(image1, (250, 200))  

cv2.imshow("Original", imS)
cv2.imshow("Input1", imS1)

我需要用户输入图像保存在图像和图像 1 中进行比较。 如何进行?

【问题讨论】:

    标签: python opencv data-science pysimplegui image-comparison


    【解决方案1】:

    您可以通过event, values = window.read() 行获取您的sg.Input() 值,并且您可以访问您的输入以获取您的输入。 您的代码将是这样的:

      # Original image
      image = cv2.imread(values[0])
      gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      histogram = cv2.calcHist([gray_image], [0], 
                                 None, [256], [0, 256])
    
           
        # Input1 image
      image1 = cv2.imread(values[1])
      gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
      histogram1 = cv2.calcHist([gray_image1], [0], 
                                  None, [256], [0, 256])
      break
    

    注意:你应该关闭你的窗口并在你的代码末尾用这些行从 opencv imshow 销毁窗口:

    cv2.waitKey()
    cv2.destroyAllWindows()
    window.close()
    

    【讨论】:

    • 嗨,谢谢。现在我没有收到任何错误,但在单击比较时甚至没有得到“原始图像与输入图像匹配/不匹配”之类的结果。如何在“比较”按钮上添加比较?
    • 它是因为您没有在比较事件点击后添加break。我为你编辑答案
    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多