建站行业分析,网站开发相关知识,标志设计课件,中文网站模板下载免费Logo标志是一种视觉符号#xff0c;代表着一个品牌、企业或组织的形象。它通常采用图形、字母或字形来代表一个公司或品牌#xff0c;起到对徽标拥有公司的识别和推广的作用。Logo的设计需要考虑多种因素#xff0c;例如颜色搭配、字体选择和构图等#xff0c;以创造出独特…Logo标志是一种视觉符号代表着一个品牌、企业或组织的形象。它通常采用图形、字母或字形来代表一个公司或品牌起到对徽标拥有公司的识别和推广的作用。Logo的设计需要考虑多种因素例如颜色搭配、字体选择和构图等以创造出独特且易于记忆的标志。
本例实现针对给定的logo图案生成孔位坐标供钻孔加工出logo图案具体如下
输入一张logo图片钻孔半径孔间距。
输出孔位坐标。
实现原理先读取图片然后提取轮廓针对每个轮廓计算其x、y坐标最大值和最小值在这些值构成的矩形内划分正交网格网格点为候选圆心坐标点最后以候选点是否在轮廓内为条件进行筛选得到最终满足条件的坐标点。 图logo示例
import cv2
import numpy as np
def generate_grid(contour, spacing):connp.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_maxspacing, spacing)y np.arange(y_min-spacing, y_maxspacing, 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, measureDistFalse)if result 0:hole_coordinates.append((i, j))return hole_coordinates
if __name__ __main__:image_path rC:\Usersxxx\1.jpgimg cv2.imread(image_path)logo_boundary extract_logo_boundary(img)hole_spacing 6radius 2hole_coordinates[]for bd in logo_boundary:hole_coordinatesgenerate_hole_coordinates(bd, hole_spacing)draw_circle(img, hole_coordinates, radius)
图提取的logo轮廓 图获得的孔位结果
从程序运行结果可以看出处理环形区域内部也计算了孔位坐标外效果还可以需要进一步去除环形区域内的孔位点。