当前位置: 首页 > news >正文

vs做的本地网站上海网站哪家好

vs做的本地网站,上海网站哪家好,广州地铁官网,泰国清迈房产网站大全-------------OpenCV教程集合------------- Python教程99#xff1a;一起来初识OpenCV#xff08;一个跨平台的计算机视觉库#xff09; OpenCV教程01#xff1a;图像的操作#xff08;读取显示保存属性获取和修改像素值#xff09; OpenCV教程02#xff1a;图像处理…-------------OpenCV教程集合------------- Python教程99一起来初识OpenCV一个跨平台的计算机视觉库 OpenCV教程01图像的操作读取显示保存属性获取和修改像素值 OpenCV教程02图像处理系统1.0翻转形态学滤波缩放旋转 OpenCV教程03绘制图形线段、矩形、圆形、椭圆、多边形、箭头线水印文本 1.准备一张要输入的图像素材没有的话也可以拿下面的图片练习一下大小为250250或300300。基于OpenCVtkinter的图像处理系统1.0主要功能翻转形态学滤波缩放旋转的示例用法代码已跑亲测有效。感兴趣的朋友自己学习一下。当然运行该代码一些必要的第三方安装包是必不可少的自己看着源码逐一模块安装一下。 2.py源码不足的地方 a.仅支持png和jpe的图片格式如果你要添加其他的图片格式自己在源码里面的通用对话框增加一些格式默认是显示png格式。 b.没有办法保存生成的新图片当然你可以参考历史pillow教程博文中tk是如何显示和保存图片的。 Pillow教程10设计博文的文字背景封面图再也不担心找不到素材了 c.显示图片的窗口大小是固定的输入的图像最好为250*250这样刚好显示。如果你要显示更大的自己调一下tk窗口组件的大小。 运行后的效果 # -*- coding: utf-8 -*- # Author : 小红牛 # 微信公众号WdPython import tkinter.messagebox as messagebox import tkinter as tk from tkinter import ttk from PIL import Image, ImageTk import os from tkinter.filedialog import askopenfilename, asksaveasfilename import cv2 import numpy as npfile_path os.path.dirname(__file__) test_file_path file_path os.sep example.pngWIN_WIDTH 700 WIN_HEIGHT 400class Image_sys():def __init__(self):self.root tk.Tk()self.root.geometry(700x4008080)self.root.title(图像处理系统1.0——微信公众号WdPython) # 设置窗口标题# self.root.iconbitmap(icon/icon.ico) # 设置窗口图标# scnWidth, scnHeight self.root.maxsize()# 屏幕中心居中# center %dx%d%d%d % (WIN_WIDTH, WIN_HEIGHT, (scnWidth - WIN_WIDTH) / 2, (scnHeight - WIN_HEIGHT) / 2)# print(center)# 设置窗口的大小宽x高偏移量# self.root.geometry(center)# 调用方法会禁止根窗体改变大小self.root.resizable(False, False)menubar tk.Menu(self.root) # 创建菜单栏 (Menu)self.root.config(menumenubar)# 创建文件下拉菜单# 文件菜单下 tearoff0 表示有没有分隔符默认为有分隔符file_menu tk.Menu(menubar, tearoff0)# 为顶级菜单实例添加菜单并级联相应的子菜单实例menubar.add_cascade(label文件, menufile_menu)file_menu.add_command(label打开测试文件, commandself.open_test_file)file_menu.add_command(label打开自定义文件, commandself.open_file)file_menu.add_command(label复原, commandself.recover)file_menu.add_command(label清除, commandself.clear)file_menu.add_command(label退出, commandself.exit_sys)# 创建翻转下拉菜单turn_menu tk.Menu(menubar, tearoff0)menubar.add_cascade(label翻转, menuturn_menu)turn_menu.add_command(label水平, commandself.flip_horizontal)turn_menu.add_command(label垂直, commandself.flip_vertical)turn_menu.add_command(label水平垂直, commandself.flip_hor_ver)# 形态学morph_menu tk.Menu(menubar, tearoff0)menubar.add_cascade(label形态学, menumorph_menu)morph_menu.add_command(label腐蚀, commandself.mor_corrosion)morph_menu.add_command(label膨胀, commandself.mor_expand)morph_menu.add_command(label开运算, commandself.mor_open_operation)morph_menu.add_command(label闭运算, commandself.mor_close_operation)morph_menu.add_command(labelMorphological Gradient, commandself.mor_gradient)morph_menu.add_command(label顶帽, commandself.mor_top_hat)morph_menu.add_command(label黑帽, commandself.mor_black_hat)# 滤波filter_menu tk.Menu(menubar, tearoff0)menubar.add_cascade(label滤波, menufilter_menu)filter_menu.add_command(label均值, commandself.filter_mean)filter_menu.add_command(label方框, commandself.filter_box)filter_menu.add_command(label高斯, commandself.filter_gauss)filter_menu.add_command(label中值, commandself.filter_mid_value)filter_menu.add_command(label双边, commandself.filter_bilateral)# 缩放scale_menu tk.Menu(menubar, tearoff0)menubar.add_cascade(label缩放, menuscale_menu)scale_menu.add_command(label放大PyrUp, commandself.scale_pyrup)scale_menu.add_command(label缩小PyrDown, commandself.scale_pyrdown)scale_menu.add_command(label放大Resize, commandself.scale_zoom_in)scale_menu.add_command(label缩小Resize, commandself.scale_zoom_out)# 旋转rotate_menu tk.Menu(menubar, tearoff0)menubar.add_cascade(label旋转, menurotate_menu)rotate_menu.add_command(label平移, commandself.rotate_offset)rotate_menu.add_command(label仿射, commandself.rotate_affine)rotate_menu.add_command(label透射, commandself.rotate_transmission)rotate_menu.add_command(label顺时针-无缩放, commandself.rotate_clockwise)rotate_menu.add_command(label顺时针-缩放, commandself.rotate_clockwise_zoom)rotate_menu.add_command(label逆时针-缩放, commandself.rotate_anti_zoom)rotate_menu.add_command(label零旋转-缩放, commandself.rotate_zero_zoom)# 帮助help_menu tk.Menu(menubar, tearoff0)menubar.add_cascade(label帮助, menuhelp_menu)help_menu.add_command(label版权, commandself.help_copyright)help_menu.add_command(label关于, commandself.help_about)# 创建一个容器,其父容器为self.rootself.frame_scr ttk.LabelFrame(self.root, textScour image:)# padx pady 该容器外围需要留出的空余空间self.frame_scr.place(x80, y30, width250, height250)# 创建一个容器,其父容器为self.rootself.frame_des ttk.LabelFrame(self.root, textDestination image:)# padx pady 该容器外围需要留出的空余空间self.frame_des.place(x370, y30, width250, height250)# 创建两个labellabel_scr ttk.Label(self.root, text源图像, font25, foregroundblue, anchorcenter)label_scr.place(x150, y280, width100, height50)label_des ttk.Label(self.root, text目标图像, font25, foregroundblue, anchorcenter)label_des.place(x450, y280, width100, height50)self.label_scr_image Noneself.label_des_image Noneself.path self.root.mainloop()def open_test_file(self):self.path test_file_pathimage Image.open(self.path)test_image ImageTk.PhotoImage(image)if (self.label_des_image ! None):self.label_des_image.pack_forget() # 隐藏控件self.label_des_image Noneif (self.label_scr_image None):self.label_scr_image tk.Label(self.frame_scr, imagetest_image)self.label_scr_image.configure(imagetest_image)self.label_scr_image.pack()self.root.mainloop()def open_file(self):# 打开文件对话框open_img_path askopenfilename(initialdirfile_path,filetypes[(png格式, png), (jpg格式, jpg), (bmp格式, bmp)],parentself.root,title打开自定义图片)if (open_img_path ):returnelse:if (self.label_des_image ! None):self.label_des_image.pack_forget() # 隐藏控件self.label_des_image Noneself.path open_img_pathimage Image.open(self.path)tk_image ImageTk.PhotoImage(image)if (self.label_scr_image None):self.label_scr_image tk.Label(self.frame_scr, imagetk_image)self.label_scr_image.configure(imagetk_image)self.label_scr_image.pack() # 显示控件self.root.mainloop()def recover(self):if (self.path ):returnimage Image.open(self.path)tk_image ImageTk.PhotoImage(image)if (self.label_des_image None):returnself.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()def clear(self):if (self.label_scr_image ! None):self.label_scr_image.pack_forget() # 隐藏控件self.label_scr_image Noneself.path if (self.label_des_image ! None):self.label_des_image.pack_forget() # 隐藏控件self.label_des_image Noneself.path def exit_sys(self):quit_root messagebox.askokcancel(提示, 真的要退出么!~)if (quit_root True):self.root.destroy()returndef flip_horizontal(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# Flipped Horizontally 水平翻转image_hflip cv2.flip(image, 1)image_pil_hflip Image.fromarray(image_hflip)tk_image ImageTk.PhotoImage(image_pil_hflip)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()def flip_vertical(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# Flipped Horizontally 水平翻转image_hflip cv2.flip(image, 0) # 垂直翻转image_pil_hflip Image.fromarray(image_hflip)tk_image ImageTk.PhotoImage(image_pil_hflip)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()def flip_hor_ver(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# Flipped Horizontally 水平翻转image_hflip cv2.flip(image, -1) # 水平垂直翻转image_pil_hflip Image.fromarray(image_hflip)tk_image ImageTk.PhotoImage(image_pil_hflip)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()def mor_corrosion(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# kernel np.ones((5, 5), np.uint8)# 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_erosion cv2.erode(image, kernel) # 腐蚀image_pil_erosion Image.fromarray(img_erosion)tk_image ImageTk.PhotoImage(image_pil_erosion)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 膨胀def mor_expand(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# kernel np.ones((5, 5), np.uint8)# 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_dilation cv2.dilate(image, kernel) # 膨胀image_pil_dilation Image.fromarray(img_dilation)tk_image ImageTk.PhotoImage(image_pil_dilation)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 开运算def mor_open_operation(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# kernel np.ones((5, 5), np.uint8)# 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_open_operation cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) # 开运算image_pil_open Image.fromarray(img_open_operation)tk_image ImageTk.PhotoImage(image_pil_open)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 闭运算def mor_close_operation(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# kernel np.ones((5, 5), np.uint8)# 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_close_operation cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel) # 闭运算image_pil_close Image.fromarray(img_close_operation)tk_image ImageTk.PhotoImage(image_pil_close)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 形态学梯度膨胀图减去腐蚀图dilation - erosion这样会得到物体的轮廓def mor_gradient(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并# kernel np.ones((5, 5), np.uint8)# 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_gradient cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel) # 形态学梯度image_pil_gradient Image.fromarray(img_gradient)tk_image ImageTk.PhotoImage(image_pil_gradient)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 顶帽def mor_top_hat(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并kernel np.ones((7, 7), np.uint8) # 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构# kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_top_hat cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel) # 顶帽image_pil_top_hat Image.fromarray(img_top_hat)tk_image ImageTk.PhotoImage(image_pil_top_hat)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 黑帽def mor_black_hat(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并kernel np.ones((7, 7), np.uint8) # 指定核大小# kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构# kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构# kernel cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构img_black_hat cv2.morphologyEx(image, cv2.MORPH_BLACKHAT, kernel) # 黑帽image_pil_black_hat Image.fromarray(img_black_hat)tk_image ImageTk.PhotoImage(image_pil_black_hat)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()常见噪声有椒盐噪声和高斯噪声椒盐噪声可以理解为斑点随机出现在图像中的黑点或白点高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声这样解释并不准确只要能简单分辨即可。# 均值滤波def filter_mean(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_mean cv2.blur(image, (3, 3)) # 均值滤波image_pil_mean Image.fromarray(img_mean)tk_image ImageTk.PhotoImage(image_pil_mean)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 方框滤波方框滤波跟均值滤波很像当可选参数normalize为True的时候方框滤波就是均值滤波# 如3×3的核a就等于1/9normalize为False的时候a1相当于求区域内的像素和。def filter_box(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_box cv2.boxFilter(image, -1, (3, 3), normalizeFalse) # 方框滤波image_pil_box Image.fromarray(img_box)tk_image ImageTk.PhotoImage(image_pil_box)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 高斯滤波与两种滤波方式卷积核内的每个值都一样相当于图像区域中每个像素的权重也就一样。# 高斯滤波的卷积核权重并不相同中间像素点权重最高越远离中心的像素权重越小。# 高斯滤波相比均值滤波效率要慢但可以有效消除高斯噪声能保留更多的图像细节所以经常被称为最有用的滤波器。def filter_gauss(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_gauss cv2.GaussianBlur(image, (1, 1), 1) # 方框滤波image_pil_gauss Image.fromarray(img_gauss)tk_image ImageTk.PhotoImage(image_pil_gauss)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 中值滤波中值又叫中位数是所有值排序后取中间的值。# 中值滤波就是用区域内的中值来代替本像素值所以那种孤立的斑点# 如0或255很容易消除掉适用于去除椒盐噪声和斑点噪声。中值是一种非线性操作效率相比前面几种线性滤波要慢。# 斑点噪声图用中值滤波显然更好def filter_mid_value(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_mid_value cv2.medianBlur(image, 5) # 中值滤波image_pil_mid_value Image.fromarray(img_mid_value)tk_image ImageTk.PhotoImage(image_pil_mid_value)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 双边滤波模糊操作基本都会损失掉图像细节信息尤其前面介绍的线性滤波器图像的边缘信息很难保留下来。# 然而边缘edge信息是图像中很重要的一个特征所以这才有了双边滤波。def filter_bilateral(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_bilateral cv2.bilateralFilter(image, 9, 75, 75) # 双边滤波image_pil_bilateral Image.fromarray(img_bilateral)tk_image ImageTk.PhotoImage(image_pil_bilateral)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()# 图像金字塔操作的将是图像的像素问题图像变清晰了还是模糊了# 图像金字塔主要有两类高斯金字塔和拉普拉斯金字塔。def scale_pyrup(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_pyrup cv2.pyrUp(image) # 高斯金字塔image_pil_pyrup Image.fromarray(img_pyrup)tk_image ImageTk.PhotoImage(image_pil_pyrup)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.pack()self.root.mainloop()def scale_pyrdown(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并img_pyrdown cv2.pyrDown(image) # 高斯金字塔image_pil_pyrdown Image.fromarray(img_pyrdown)tk_image ImageTk.PhotoImage(image_pil_pyrdown)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(relx0,rely0)# 放置组件的不同方式self.label_des_image.pack()self.root.mainloop()# 放大def scale_zoom_in(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并size (2 * image.shape[1], 2 * image.shape[0])img_zoom_in cv2.resize(image, size) # 放大image_pil_zoom_in Image.fromarray(img_zoom_in)tk_image ImageTk.PhotoImage(image_pil_zoom_in)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)self.label_des_image.place(x0, y0) # 放置组件的不同方式与金字塔放大相比对齐方式不同显示不同# self.label_des_image.pack()self.root.mainloop()# 缩小def scale_zoom_out(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并size (int(0.3 * image.shape[1]), int(0.3 * image.shape[0]))img_zoom_out cv2.resize(image, size) # 放大image_pil_zoom_out Image.fromarray(img_zoom_out)tk_image ImageTk.PhotoImage(image_pil_zoom_out)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 平移def rotate_offset(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]direction np.float32([[1, 0, 50], [0, 1, 50]]) # 沿x轴移动50沿y轴移动50img_offset cv2.warpAffine(image, direction, (width, height))image_pil_offset Image.fromarray(img_offset)tk_image ImageTk.PhotoImage(image_pil_offset)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 仿射-需要三个点坐标def rotate_affine(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]pts1 np.float32([[50, 50], [200, 50], [50, 200]])pts2 np.float32([[10, 100], [200, 50], [100, 250]])rot_mat cv2.getAffineTransform(pts1, pts2) # 沿x轴移动50沿y轴移动50img_affine cv2.warpAffine(image, rot_mat, (width, height))image_pil_affine Image.fromarray(img_affine)tk_image ImageTk.PhotoImage(image_pil_affine)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 透射 -需要四个点的坐标def rotate_transmission(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]pts1 np.float32([[56, 65], [238, 52], [28, 237], [239, 240]])pts2 np.float32([[0, 0], [250, 0], [0, 250], [250, 250]])rot_mat cv2.getPerspectiveTransform(pts1, pts2)img_clockwise cv2.warpPerspective(image, rot_mat, (250, 250)) # 透射与仿射的函数不一样image_pil_clockwise Image.fromarray(img_clockwise)tk_image ImageTk.PhotoImage(image_pil_clockwise)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 顺时针无缩放def rotate_clockwise(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]rotate_center (width // 2, height // 2)rot_mat cv2.getRotationMatrix2D(rotate_center, angle-45, scale1) # 旋转中心rotate_center角度degree 缩放scaleimg_clockwise cv2.warpAffine(image, rot_mat, (width, height))image_pil_clockwise Image.fromarray(img_clockwise)tk_image ImageTk.PhotoImage(image_pil_clockwise)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 顺时针-缩放def rotate_clockwise_zoom(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]rotate_center (width // 2, height // 2)rot_mat cv2.getRotationMatrix2D(rotate_center, angle-45, scale0.6) # 旋转中心rotate_center角度degree 缩放scaleimg_clockwise_zoom cv2.warpAffine(image, rot_mat, (width, height))image_pil_clockwise_zoom Image.fromarray(img_clockwise_zoom)tk_image ImageTk.PhotoImage(image_pil_clockwise_zoom)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 逆时针-缩放def rotate_anti_zoom(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]rotate_center (width // 2, height // 2)rot_mat cv2.getRotationMatrix2D(rotate_center, angle45, scale0.6) # 旋转中心rotate_center角度degree 缩放scaleimg_clockwise_zoom cv2.warpAffine(image, rot_mat, (width, height))image_pil_clockwise_zoom Image.fromarray(img_clockwise_zoom)tk_image ImageTk.PhotoImage(image_pil_clockwise_zoom)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()# 零旋转-缩放def rotate_zero_zoom(self):if (self.path ):returnif (self.label_scr_image None):returnimage cv2.imdecode(np.fromfile(self.path, dtypenp.uint8), 1) # 读取图片b, g, r cv2.split(image) # 三通道分离image cv2.merge([r, g, b]) # 三通道合并width, height image.shape[1], image.shape[0]rotate_center (width // 2, height // 2)rot_mat cv2.getRotationMatrix2D(rotate_center, angle0, scale0.6) # 旋转中心rotate_center角度degree 缩放scaleimg_zero_zoom cv2.warpAffine(image, rot_mat, (width, height))image_pil_zero_zoom Image.fromarray(img_zero_zoom)tk_image ImageTk.PhotoImage(image_pil_zero_zoom)if (self.label_des_image None):self.label_des_image tk.Label(self.frame_des, imagetk_image)self.label_des_image.configure(imagetk_image)# self.label_des_image.place(x0, y0)self.label_des_image.pack()self.root.mainloop()def help_copyright(self):tk.messagebox.showinfo(title版权, message微信公众号WdPython~)def help_about(self):tk.messagebox.showinfo(title关于, message微信公众号WdPython~~)if __name__ __main__:Image_sys() 完毕感谢您的收看 ----------★★历史博文集合★★---------- 我的零基础Python教程Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame
http://www.hkea.cn/news/14383256/

相关文章:

  • 普通展示型网站网站云主机吗
  • j2ee大型网站开发框架wordpress默认账号密码
  • 儿童玩具网站建设策划书百度一下官方网
  • 十堰网站建设兼职惠州seo推广公司
  • 制作游戏的网站网站建设平台信息
  • 望城区建设局网站企业网站建设小技巧有哪些
  • 百度推广要不要建网站如何自己建设简单的手机网站首页
  • 做淘客网站怎么样wordpress cloudflare
  • 重庆市建设局网站网盟推广合作
  • 网站建设公司信息h5制作开发地点
  • 合肥做个网站什么价格便宜东方网站建设
  • 注册网站的步骤重庆vi设计公司
  • 个人响应式网站建设为什么不要做外包员工
  • 山西 网站制作iis默认网站停止
  • 宁波建设工程报名网站福州网站备案
  • 做网站 excel微营销
  • 如何解决网站兼容长页网站
  • 备案网站名称有什么用聊城网站建设有限公司
  • 网站标题写什么作用网站建设维护岗位
  • 河南省级住房城乡建设主管部门网站专业网站优化方案
  • 深圳广东网站建设套餐郑州集团网站建设哪家好
  • 广东营销型网站建设多少钱大型门户网站建设包括哪些方面
  • 温岭市溪建设局网站教育类网站配色
  • 单位网站建设要多少钱腾讯企业邮箱手机登录入口官网
  • 网站建设与维护要用到代码吗深圳网站(建设信科网络)
  • 网站如何识别移动端学会网站建设总结
  • 娱乐网站设计SEO营销自己的网站
  • 怎么建设vip电影网站建筑模板木板
  • 网和网站的区别网站域名怎么过户
  • 做网站的销售团队南沙网站建设公司哪家好