python之logo编程

Logo标志是一种视觉符号,代表着一个品牌、企业或组织的形象。它通常采用图形、字母或字形来代表一个公司或品牌,起到对徽标拥有公司的识别和推广的作用。Logo的设计需要考虑多种因素,例如颜色搭配、字体选择和构图等,以创造出独特且易于记忆的标志。

本例实现针对给定的logo图案,生成孔位坐标供钻孔加工出logo图案,具体如下:

输入:一张logo图片,钻孔半径,孔间距。

输出:孔位坐标。

实现原理:先读取图片,然后提取轮廓,针对每个轮廓计算其x、y坐标最大值和最小值,在这些值构成的矩形内划分正交网格,网格点为候选圆心坐标点,最后以候选点是否在轮廓内为条件进行筛选,得到最终满足条件的坐标点。

图:logo示例

import cv2
import numpy as np
def generate_grid(contour, spacing):con=np.squeeze(contour)x_min= np.min(con[:, 0])x_max = np.max(con[:, 0])y_min = np.min(con[:, 1])y_max = np.max(con[:, 1])x = np.arange(x_min-spacing, x_max+spacing, spacing)y = np.arange(y_min-spacing, y_max+spacing, spacing)xx, yy = np.meshgrid(x, y)return xx.flatten(), yy.flatten()
​
​
def draw_circle(img, hole_coordinates, radius):# 将hole_coordinates转换成numpy数组hole_coordinates = np.array(hole_coordinates)# 遍历每个圆心点坐标,画圆并显示在img中for coordinate in hole_coordinates:x, y = coordinatecv2.circle(img, (int(x), int(y)), radius, (0, 0, 255), -1)
​# 显示图像cv2.imshow('image', img)cv2.waitKey(0)cv2.destroyAllWindows()
​
​
def extract_logo_boundary(img):imginfo = img.shapeheight = imginfo[0]width = imginfo[1]gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
​# 二值化处理ret, binary = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY)
​# 找到所有轮廓contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
​# 筛选轮廓logo_contours = []for contour in contours:area = cv2.contourArea(contour)if area > 100 and area < 0.5 * width * height:logo_contours.append(contour)
​# 在原图上绘制轮廓img_with_logo = img.copy()cv2.drawContours(img_with_logo, logo_contours, -1, (0, 0, 255), 6)
​# 显示图像cv2.imshow('Image with Logo', img_with_logo)cv2.waitKey(0)cv2.destroyAllWindows()
​return logo_contours
​
​
def generate_hole_coordinates(contour, hole_spacing):xx, yy = generate_grid(contour, hole_spacing)hole_coordinates = []for i, j in zip(xx, yy):pt=(i.astype(float),j.astype(float))# 使用cv2.pointPolygonTest()函数判断点是否在轮廓内result = cv2.pointPolygonTest(contour,pt, measureDist=False)if result >= 0:hole_coordinates.append((i, j))return hole_coordinates
​
​
if __name__ == "__main__":image_path = r"C:\Usersxxx\1.jpg"img = cv2.imread(image_path)logo_boundary = extract_logo_boundary(img)hole_spacing = 6radius = 2hole_coordinates=[]for bd in logo_boundary:hole_coordinates+=generate_hole_coordinates(bd, hole_spacing)draw_circle(img, hole_coordinates, radius)
​

图:提取的logo轮廓

图:获得的孔位结果

从程序运行结果可以看出,处理环形区域内部也计算了孔位坐标外,效果还可以,需要进一步去除环形区域内的孔位点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java餐饮刀削面快餐店点餐服务系统springboot+jsp

网上点餐省去了客户很多不必要的时间和麻烦&#xff0c;给商家带来更多利益。同时&#xff0c;网上点餐可以辅助餐饮企业营销。传统的点餐是需要配备一个专业的服务员负责菜品介绍并记录顾客点单&#xff0c;确认后上交至后台厨房&#xff0c;厨房根据菜品种类安排做菜顺序最终…

11.28 C++作业

提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串&#xff1a;" <<…

前端面试灵魂提问-计网(2)

1、websocket 为什么全双工? 1.1 WebSocket是什么 WebSocket 是一种通信协议&#xff0c;它在客户端和服务器之间建立持久的全双工连接。全双工意味着数据可以双向流动&#xff0c;即客户端可以向服务器发送消息&#xff0c;服务器也可以向客户端发送消息&#xff0c;而无需…

Hertz 整合swagger

文章目录 Swagger安装使用用法项目demoSwagger注释用法通用API信息 swag命令行参数swagger路由配置 Swagger 安装 go get 安装可执行文件需要配合 GOPATH 模式工作。 go get github.com/swaggo/swag/cmd/swag 因为从 Go 1.17 开始&#xff0c;在 go mod 模式下通过 go get 下…

Go 语言中 sync 包的近距离观察

让我们来看看负责提供同步原语的 Go 包&#xff1a;sync。 sync.Mutex sync.Mutex 可能是 sync 包中被广泛使用的原语。它允许对共享资源进行互斥操作&#xff08;即不允许同时访问&#xff09;&#xff1a; mutex : &sync.Mutex{}mutex.Lock() // Update shared variab…

Jinja2使用Layui报 “d is not defined“

问题出现场景在使用Jinja2渲染Layui的表格时候&#xff0c;要做自定义templte的传入 Jinja2这块本来就是支持 {{ }} 插值的模板语言&#xff0c;所以这块的第一种渲染方式会冲突 所以只能用函数返回代码块进行填充&#xff0c;不能使用插值&#xff0c;只能拼接字符串 templt…

Gradle windows下配置

1.Gradle下载 打开官网下载界面&#xff1a;https://gradle.org/releases/ 如果你使用的SpringBoot项目&#xff0c;建议使用6.8及以上的版本 2.下载后放到目录下 3.配置环境变量 配置gradle_home 配置Path 4.配置成功 5.配置国内源 新建一个init.gradle文件&#xff0c;配…

MySQL- CRUD-单表查询

一、INSERT 添加 公式 INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]); 示例&#xff1a; CREATE TABLE goods (id INT ,good_name VARCHAR(10),price DOUBLE ); #添加数据 INSERT INTO goods (id,good_name,price ) VALUES (20,华为手机,…

虚假IP地址攻击的溯源方法

随着网络技术的迅速发展&#xff0c;网络攻击行为也日益猖獗。其中&#xff0c;虚假IP地址攻击是一种较为常见的网络攻击方式&#xff0c;它利用虚假的IP地址&#xff0c;通过互联网对目标进行攻击和入侵。这种攻击方式不仅难以追踪&#xff0c;而且往往会给企业和个人带来巨大…

Java的运算符

Java的运算符主要分为以下几类&#xff1a;算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和条件运算符。 一、算术运算符 算术运算符主要用于执行数值计算&#xff0c;包括加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff0…

在安全环境中使用虚拟化进行隔离——Armv8.4上的安全世界软件架构

目录 一、简介 二、背景-Arm TrustZone™技术的简要历史 三、当今安全世界的挑战 3.1. 可信应用生态系统的挑战 3.2. 在安全世界集成来自多个供应商的代码 3.3. 最小权限原则

【AUTOSAR OS】如何处理高频高速任务的挑战?

本文重点 Cat1中断提供了一种直接与硬件交互的强大方式,因此在使用这种类型的中断时必须要谨慎。Cat2中断通常用于调度基础软件和应用级软件组件的所有任务AUTOSAR OS是一个完全抢占式的操作系统,因此AUTOSAR应用任务可能会相互中断。允许一个AUTOSAR任务中断或阻塞高速调度任…

Android 手机屏幕适配方式和原理

其适配原理主要是根据dp/sp与px的转换&#xff0c;而dp/sp与px的转换又与DisplayMetrics的density相关&#xff0c;所以可以通过改变DisplayMetrics的density&#xff0c;scaledDensity和densityDpi的值来适配不同分辨率机型。 在开始分析之前&#xff0c;我们需要了解一些概念…

股票要怎么买入卖出?

股票账户终于开好了&#xff01;恭喜你马上就可以开启刺激的炒股之旅了&#xff01;不过第一次买股票的你是不是还不知道怎么个买法呢&#xff1f;别担心~贴心的汇小鲸带着教程来了&#xff0c;咱们一起看看吧&#xff01; 首先一点&#xff0c;大家得知道&#xff1a;开好户还…

Python---文件操作综合案例

需求&#xff1a;批量修改文件名&#xff0c;既可添加指定字符串&#xff0c;又能删除指定字符串。 步骤&#xff1a; ① 设置添加删除字符串的的标识 ② 获取指定目录的所有文件 ③ 将原有文件名添加/删除指定字符串&#xff0c;构造新名字 ④ os.rename()重命名 代码&am…

异步重试 当你需要不停调用第三方接口,直到返回成功或失败时,可以使用类似的异步重试的机制。l

当你需要不停调用第三方接口&#xff0c;直到返回成功或失败时&#xff0c;可以使用类似的异步重试的机制。以下是一个整合了这个要求的简单示例代码&#xff1a; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.…

JavaFramework JDK Version Test

测试JDK8 JDK17编译包 当前环境JDK8 CASE 1&#xff1a; /*** * author ZengWenFeng* email 117791303QQ.com* mobile 13805029595* date 2023-08-07*/ package zwf;import a.T; import ce.pub.util.GUID;/*** 测试高版本JDK编译JAR&#xff0c;低版本错误** author ZengWenF…

震坤行:数字驱动食品农副行业采购的新兴趋势与实践

震坤行&#xff1a;数字驱动食品农副行业采购的新兴趋势与实践 近年来消费者对于营养价值和健康的追求日益凸显&#xff0c;促使各类有机食品、低糖低脂食品、素食等健康食品受到热烈追捧。同时&#xff0c;以往单一的产品也被各家企业“卷”出了个性化&#xff0c;光是卖水&a…

技术经济与企业管理 救命稻草

明天要考试了&#xff0c;今天开始预习&#xff01; 此课也叫【化工技术经济】、【工程经济学】 目录 第二章 企业战略分析市场预测方法一元线性回归方法简单移动平均法 第三章 资金的时间价值&#xff08;考&#xff09;资金时间价值的衡量利率现金流量图资金等值计算&#x…

四、设置主机名和域名映射

目录 1、配置每台虚拟机主机名 2、配置每台虚拟机域名映射 1、配置每台虚拟机主机名