python人工智能opencv工具作业:使用tkinter展示

作者: python测试开发 | 来源:发表于2018-12-04 06:38 被阅读58次

    opencv工具作业:使用tkinter展示边缘检测

    图片.png 图片.png 图片.png 图片.png

    参考资料

    代码

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # 技术支持:https://www.jianshu.com/u/69f40328d4f0 
    # 技术支持 https://china-testing.github.io/
    # https://github.com/china-testing/python-api-tesing/blob/master/practices/cv/cv1.py
    # 项目实战讨论QQ群630011153 144081101
    # CreateDate: 2018-12-04
    
    # import the necessary packages
    from tkinter import *
    from PIL import Image
    from PIL import ImageTk
    from tkinter import filedialog
    import cv2
    
    def select_image():
        # grab a reference to the image panels
        global panelA, panelB
    
        # open a file chooser dialog and allow the user to select an input
        # image
        path = filedialog.askopenfilename()
    
        # ensure a file path was selected
        if len(path) > 0:
            # load the image from disk, convert it to grayscale, and detect
            # edges in it
            image = cv2.imread(path)
            gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
            edged = cv2.Canny(gray, 50, 100)
    
            # OpenCV represents images in BGR order; however PIL represents
            # images in RGB order, so we need to swap the channels
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    
            # convert the images to PIL format...
            image = Image.fromarray(image)
            edged = Image.fromarray(edged)
    
            # ...and then to ImageTk format
            image = ImageTk.PhotoImage(image)
            edged = ImageTk.PhotoImage(edged)
    
            # if the panels are None, initialize them
            if panelA is None or panelB is None:
                # the first panel will store our original image
                panelA = Label(image=image)
                panelA.image = image
                panelA.pack(side="left", padx=10, pady=10)
    
                # while the second panel will store the edge map
                panelB = Label(image=edged)
                panelB.image = edged
                panelB.pack(side="right", padx=10, pady=10)
    
            # otherwise, update the image panels
            else:
                # update the pannels
                panelA.configure(image=image)
                panelB.configure(image=edged)
                panelA.image = image
                panelB.image = edged
    
    # initialize the window toolkit along with the two image panels
    root = Tk()
    panelA = None
    panelB = None
    root.title("opencv 边缘检测演示")  
    
    # create a button, then when pressed, will trigger a file chooser
    # dialog and allow the user to select an input image; then add the
    # button the GUI
    btn = Button(root, text="选择图片", command=select_image)
    btn.pack(side="bottom", fill="both", expand="yes", padx="100", pady="100")
    
    # kick off the GUI
    root.mainloop()
    

    相关文章

      网友评论

        本文标题:python人工智能opencv工具作业:使用tkinter展示

        本文链接:https://www.haomeiwen.com/subject/tqmpcqtx.html