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

苏州资讯网站建设站长之家素材

苏州资讯网站建设,站长之家素材,php网站怎么做静态化,怎样在手机安装wordpress昨天有位兄台给我发了个文件#xff0c;是下面这个样子的#xff1a;那一双小脚既没有裹成三寸金莲#xff0c;又没有黑丝#xff0c;这图片肯定不符合我的要求。我要的是这个样子的好不好#xff1a;让他拿扫描仪重新给我规规矩矩扫一个发过来#xff1f;他要能用扫描仪…昨天有位兄台给我发了个文件是下面这个样子的那一双小脚既没有裹成三寸金莲又没有黑丝这图片肯定不符合我的要求。我要的是这个样子的好不好让他拿扫描仪重新给我规规矩矩扫一个发过来他要能用扫描仪还用手机拍个这个东西给我好在我有巨蟒与AI对AI说给我生成一个Python程序可以打开一张图片并显示在图片容器中在图片上点击四个角点对四个角点先按x位置升序排序取前两个点为右侧点后两个点为左侧点再将左右侧两组点分别按y位置升序排序前面的为上部点后面的为下部点将这四个点按【左上右上右下左下】的秩序构造一个列表。求出这四个点的minXmaxXminYmaxY按照[[min_x,min_y],[max_x,min_y],[max_x,max_y],[min_x,max_y]]构造一个列表将图片中【左上右上右下左下】四个点构成的四边形范围内的图像进行透视变换变换为由[[min_x,min_y],[max_x,min_y],[max_x,max_y],[min_x,max_y]]这四个点构成的矩形图象。几乎任意一个AI都能够给出一个基本能够实现功能的代码然后可以继续对AI增加要求例如组装出GUI界面、要求使用自己熟悉的工具库、对图片进行缩放显示之类试着运行一下自己或者让AI更正一下错误还不到一小时就可以弄出下面的程序0728修改增加微调角点位置功能 # pip install pillow opencv-python numpy import tkinter as tk from tkinter import filedialog, messagebox from tkinter import ttkfrom PIL import Image, ImageTk import cv2 import numpy as npclass ImageCorrectorApp:def __init__(self, root):self.root rootself.root.title(图片校正工具)self.img_canvas_size 800 # 图片显示容器尺寸self.max_show_size 800 # 校正后图片最大显示尺寸# 设置ttk主题和样式style ttk.Style()# 若系统支持clam/alt/vista/xpnative等主题可选themes style.theme_names()if clam in themes:style.theme_use(clam)style.configure(TFrame, background#f8f9fa)style.configure(TLabel, background#f8f9fa, font(微软雅黑, 11))style.configure(TButton, font(微软雅黑, 11, bold), padding6)style.configure(Warn.TLabel, foreground#d9534f, font(微软雅黑, 10, bold), background#f8f9fa)# 图片相关变量self.original_img None # 原始PIL图片self.display_img None # 当前显示的PIL图片self.tk_img None # Tkinter显示用图片self.scale 1.0 # 当前缩放比例放大/缩小按钮用self.display_scale 1.0 # 打开图片时的等比例缩放因子self.points [] # 用户点击的点用于校正self.active_idx None # 当前激活点下标self.corrected_img None # 校正后的PIL图片# 主framemain_frame ttk.Frame(root, padding10)main_frame.pack(padx10, pady10)# 图片显示区及滚动条img_frame ttk.Frame(main_frame)img_frame.grid(row0, column0)self.canvas tk.Canvas(img_frame, widthself.img_canvas_size, heightself.img_canvas_size, bg#e9ecef, highlightthickness2, highlightbackground#adb5bd)self.canvas.grid(row0, column0, stickynsew)# 水平和垂直滚动条self.hbar ttk.Scrollbar(img_frame, orienttk.HORIZONTAL, commandself.canvas.xview)self.hbar.grid(row1, column0, stickyew)self.vbar ttk.Scrollbar(img_frame, orienttk.VERTICAL, commandself.canvas.yview)self.vbar.grid(row0, column1, stickyns)self.canvas.config(xscrollcommandself.hbar.set, yscrollcommandself.vbar.set)self.canvas.bind(Button-1, self.on_canvas_click) # 绑定鼠标点击事件self.root.bind(Up, self.on_key_press)self.root.bind(Down, self.on_key_press)self.root.bind(Left, self.on_key_press)self.root.bind(Right, self.on_key_press)# 右侧按钮区right_frame ttk.Frame(main_frame)right_frame.grid(row0, column1, stickynw, padx10, rowspan2)# 用Canvas模拟绿色圆角矩形边框的Labellabel_canvas tk.Canvas(right_frame, width110, height190, bg#f8f9fa, highlightthickness0)label_canvas.pack(pady8) # 画绿色圆角矩形def draw_round_rect(canvas, x1, y1, x2, y2, radius12, **kwargs):points [x1radius, y1,x2-radius, y1,x2, y1,x2, y1radius,x2, y2-radius,x2, y2,x2-radius, y2,x1radius, y2,x1, y2,x1, y2-radius,x1, y1radius,x1, y1]return canvas.create_polygon(points, smoothTrue, **kwargs)draw_round_rect(label_canvas, 2, 2, 108, 188, radius14, outline#28a745, width2, fill#f8f9fa)# 绘制文字label_canvas.create_text(10, 10, anchornw, text打开图片后点击图片选择四个角点进行校正。 \可以使用上下左右箭头对角点位置进行微调。, fill#f00, font(微软雅黑, 12), width90)ttk.Button(right_frame, text撤销最后选点, width10, commandself.reset_point, styleTButton).pack(pady8)ttk.Button(right_frame, text放大图片, width10, commandself.zoom_in, styleTButton).pack(pady8)ttk.Button(right_frame, text缩小图片, width10, commandself.zoom_out, styleTButton).pack(pady8)# 下方按钮区bottom_frame ttk.Frame(main_frame)bottom_frame.grid(row1, column0, stickysew, padx10, pady10)ttk.Button(bottom_frame, text打开图片, width12, commandself.open_image, styleTButton).pack(sideleft, expandTrue, padx8)ttk.Button(bottom_frame, text校正图片, width12, commandself.correct_image, styleTButton).pack(sideleft, expandTrue, padx8)ttk.Button(bottom_frame, text保存图片, width12, commandself.save_image, styleTButton).pack(sideleft, expandTrue, padx8)def open_image(self):# 打开图片文件按容器等比例缩放显示file_path filedialog.askopenfilename(filetypes[(Image files, *.jpg *.png *.jpeg)])if not file_path:returnself.original_img Image.open(file_path).convert(RGB)w, h self.original_img.sizescale min(self.img_canvas_size / w, self.img_canvas_size / h, 1.0)self.display_scale scaleif scale 1.0:self.display_img self.original_img.resize((int(w * scale), int(h * scale)), Image.LANCZOS)else:self.display_img self.original_img.copy()self.scale 1.0self.points.clear()self.corrected_img Noneself.show_image()def reset_point(self):if self.original_img is None:returnif len(self.points) 0:# 清除保存的最后一个角点self.points.pop()self.show_image()def show_image(self):# 在canvas上显示图片并绘制用户点击的点和线if self.display_img is None:returnw, h self.display_img.sizeself.tk_img ImageTk.PhotoImage(self.display_img)self.canvas.config(scrollregion(0, 0, w, h))self.canvas.delete(all)self.canvas.create_image(0, 0, anchornw, imageself.tk_img)# 自动检测角点并用黄色圆圈标记。经试验这个功能作用不大取消# img_np np.array(self.display_img)# if img_np.ndim 3 and img_np.shape[2] 3:# gray cv2.cvtColor(img_np, cv2.COLOR_RGB2GRAY)# else:# gray img_np# corners cv2.goodFeaturesToTrack(gray, maxCorners100, qualityLevel0.01, minDistance10)# if corners is not None:# for pt in corners:# x, y pt.ravel()# self.canvas.create_oval(x-4, y-4, x4, y4, outlineyellow, width2)# 绘制点和线for i, (x, y) in enumerate(self.points):if self.active_idx is not None and i self.active_idx:# 激活点用蓝色边框高亮self.canvas.create_oval(x-7, y-7, x7, y7, outlineblue, width3)# 绘制角点self.canvas.create_oval(x-5, y-5, x5, y5, fillred, outlinered)if i 0:x0, y0 self.points[i-1]# 绘制新选择的角点与前一个角点之间的连线self.canvas.create_line(x0, y0, x, y, fillred, width2)if len(self.points) 4:# 绘制最后一个角点与第一个角点之间的连线x0, y0 self.points[0]x3, y3 self.points[3]self.canvas.create_line(x3, y3, x0, y0, fillred, width2)def zoom_in(self):# 放大图片每次放大10%if self.display_img is None:returnself.scale * 1.1w, h self.original_img.sizescale self.display_scale * self.scaleself.display_img self.original_img.resize((int(w * scale), int(h * scale)), Image.LANCZOS)# 点坐标同步放大self.points [(int(x*1.1), int(y*1.1)) for (x, y) in self.points]self.show_image()def zoom_out(self):# 缩小图片每次缩小10%if self.display_img is None:returnself.scale / 1.1w, h self.original_img.sizescale self.display_scale * self.scaleself.display_img self.original_img.resize((int(w * scale), int(h * scale)), Image.LANCZOS)# 点坐标同步缩小self.points [(int(x/1.1), int(y/1.1)) for (x, y) in self.points]self.show_image()def on_key_press(self, event):# 方向键移动激活点if self.active_idx is None or not self.points:returnx, y self.points[self.active_idx]if event.keysym Up:y max(0, y - 1)elif event.keysym Down:y y 1elif event.keysym Left:x max(0, x - 1)elif event.keysym Right:x x 1self.points[self.active_idx] (x, y)self.show_image()def on_canvas_click(self, event):# 支持激活点和点选逻辑if self.display_img is None:returnx self.canvas.canvasx(event.x)y self.canvas.canvasy(event.y)click (int(x), int(y))# 判断是否点击到已有点idx_near Nonefor idx, (px, py) in enumerate(self.points): # 计算点击位置与已有角点之间的距离dist ((px - click[0]) ** 2 (py - click[1]) ** 2) ** 0.5if dist 8: # 距离在8像素内算点击到角点idx_near idx# 点中了已有角点if idx_near is not None:self.active_idx idx_nearself.show_image()return# 未点中已有角点若点数4新增点并激活if len(self.points) 4:self.points.append(click)self.active_idx len(self.points) - 1self.show_image()return# 点数已满4且未点中已有点不做操作def correct_image(self):# 校正图片将四边形区域映射为矩形if self.original_img is None or len(self.points) ! 4:messagebox.showwarning(提示, 请先选择图片并点击4个点)return# 将显示坐标还原为原图坐标pts np.array(self.points, dtypenp.float32) / (self.display_scale * self.scale)# 1. 按x排序分左右两组idx np.argsort(pts[:, 0])left_pts pts[idx[:2]]right_pts pts[idx[2:]]# 2. 左右组分别按y排序left_pts left_pts[np.argsort(left_pts[:, 1])]right_pts right_pts[np.argsort(right_pts[:, 1])]# 3. 按左上、右上、右下、左下排列原始点位ordered_src np.array([left_pts[0], # 左上right_pts[0], # 右上right_pts[1], # 右下left_pts[1], # 左下], dtypenp.float32)# 4. 目标点直接用x/y的min/max按左上、右上、右下、左下排列min_x np.min(pts[:, 0])max_x np.max(pts[:, 0])min_y np.min(pts[:, 1])max_y np.max(pts[:, 1])ordered_dst np.array([[min_x, min_y], # 左上[max_x, min_y], # 右上[max_x, max_y], # 右下[min_x, max_y], # 左下], dtypenp.float32)# 透视变换img_cv cv2.cvtColor(np.array(self.original_img), cv2.COLOR_RGB2BGR)# 计算透视变换矩阵M cv2.getPerspectiveTransform(ordered_src, ordered_dst)# 应用透视变换warped cv2.warpPerspective(img_cv, M, (self.original_img.width, self.original_img.height))# 裁剪到目标矩形区域cropped warped[int(min_y):int(max_y), int(min_x):int(max_x)]warped_pil Image.fromarray(cv2.cvtColor(cropped, cv2.COLOR_BGR2RGB))self.corrected_img warped_pil# 校正结果缩放显示show_w, show_h warped_pil.sizescale min(self.max_show_size / show_w, self.max_show_size / show_h, 1.0)if scale 1.0:warped_pil warped_pil.resize((int(show_w * scale), int(show_h * scale)), Image.LANCZOS)# 弹窗显示校正后图片win tk.Toplevel(self.root)win.title(校正后图片)tk_img ImageTk.PhotoImage(warped_pil)label tk.Label(win, imagetk_img)label.image tk_imglabel.pack()def save_image(self):# 保存校正后的图片if self.corrected_img is None:messagebox.showwarning(提示, 没有可保存的校正图片)returnfile_path filedialog.asksaveasfilename(defaultextension.png, filetypes[(PNG文件, *.png)])if file_path:self.corrected_img.save(file_path, PNG)messagebox.showinfo(保存成功, f图片已保存到\n{file_path})if __name__ __main__:root tk.Tk()# 设置窗体初始位置居中距上100pxscreen_w root.winfo_screenwidth()screen_h root.winfo_screenheight()win_w 980win_h 900x (screen_w - win_w) // 2y 50root.geometry(f{win_w}x{win_h}{x}{y})app ImageCorrectorApp(root)root.mainloop()AI为代码生成了注释其实最关键的就是提示词里提到的构造出原始四边形与目标图像矩形的角点一一映射的思路至于透视变换的矩阵运算可以直接调用OpenCV的API接口。程序运行界面如下AI时代就是好真正做到了让人基本上只负责构思与理解AI代码的逻辑以及修改一些小错误敲字和记忆知识都由AI负责没有AI上面的程序恐怕要花掉我半天还不一定有这么完善。附使用命令行将pip安装源设置为阿里云镜像 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple pip config set install.trusted-host mirrors.aliyun.com
http://www.pierceye.com/news/463489/

相关文章:

  • 傻瓜式大型网站开发工具餐饮业手机php网站
  • 网站建设小细节图片东阳网站建设yw126
  • 为什么找不到做网站的软件怎么做音乐mp3下载网站
  • 做一个网站需要什么网络营销方式分析论文
  • 可以做3d电影网站企业网站优化应该怎么做
  • 中山做网站联系电话app客户端开发公司
  • 秦皇岛网站推广价钱南京建设网站制作
  • 2018钓鱼网站建设邢台seo公司
  • 深圳建设交易中心网站域名网站建设
  • 做网站色弱可以吗一个网址多少钱
  • 如何查询网站接入信息产品营销网站
  • 常用博客建站程序遂溪网站开发公司
  • 网站开发软件系统安徽通皖建设工程有限公司网站
  • 意派网站开发新手篇做平面常用的网站
  • 广州网站设计费用深圳室内设计师网
  • 有什么可以做兼职的网站吗建设网站的需求分析
  • 专门做进口产品的网站6wordpress赚钱方法
  • 长兴网站建设公司郫县城乡规划建设管理局网站
  • 天津建设工程信息网站搜索引擎推广是什么工作
  • 网站的系统建设方式网站建设报价表格
  • 商城展示网站建设我劝大家不要学android
  • 官网的建站过程云南网站建设营销
  • 那个网站上有打码的任务做台州做网站的公司
  • 做公司网站 需要注意什么汕尾市住房和城建设局网站
  • 建立音乐网站网络媒体设计是什么
  • html网站怎么进入后台网站建设完成之后要索取哪些
  • 做炭化料的网站国外可以做非法网站吗
  • 厦门 网站建设 网站开发 未来网络做百科专用参考链接的网站
  • 手机网站友情链接怎么做网站轮播图
  • 网站做支付宝花呗分期设计师联盟网是谁创建的