python 测试开发项目实战 - 目录 https://china-testing.github.io/practices.html
python 工具书籍下载 - 持续更新 https://china-testing.github.io/python_books.html
opencv 工具作业: 使用 tkinter 展示边缘检测
图片. PNG
图片. PNG
图片. PNG
图片. PNG
参考资料
本文最新版本地址 https://china-testing.github.io/opencv.html
本文涉及的 python 测试开发库 https://github.com/china-testing/python-api-tesing 谢谢点赞!
本文相关海量书籍下载
代码
- #!/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 Windows 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()
来源: http://www.jianshu.com/p/3e80a0b49218