您现在的位置是:主页 > news > wordpress转zblog php/aso优化工具

wordpress转zblog php/aso优化工具

admin2025/5/21 16:27:34news

简介wordpress转zblog php,aso优化工具,建设工程英语网站,为企业推广cv(py)基于轮廓检测的多边形识别 直接上照片: 直接上代码: import cv2def sort(i):# 使用周长的倍数作为阈值,阈值越小,图像的轮廓近似与轮廓越近似shape "None"peri cv2.arcLength(i, True…

wordpress转zblog php,aso优化工具,建设工程英语网站,为企业推广cv(py)基于轮廓检测的多边形识别 直接上照片: 直接上代码: import cv2def sort(i):# 使用周长的倍数作为阈值,阈值越小,图像的轮廓近似与轮廓越近似shape "None"peri cv2.arcLength(i, True…

cv(py)基于轮廓检测的多边形识别

直接上照片:
在这里插入图片描述
直接上代码:

import cv2def sort(i):# 使用周长的倍数作为阈值,阈值越小,图像的轮廓近似与轮廓越近似shape = "None"peri = cv2.arcLength(i, True)               # 周长approx = cv2.approxPolyDP(i, 0.02 * peri, True)    # 获取轮廓# 在这里0.01会把小的三角形识别为长方形# 0.05会把圆识别为正方形# 3个点,三角形if len(approx) == 3:shape = "triangle"# 四个点,矩形elif len(approx) == 4:# 计算轮廓的边界框 并且计算宽高比(x, y, w, h) = cv2.boundingRect(approx)ar = w / float(h)# 这里设置 长宽比在0.9~1.1之类的为正方形,  可以改小范围,使结果精确if ar < 0.9 or ar > 1.1:shape = "rectangle"else:shape = "square"# 否则为圆else:shape = "circle"print("circle_count=", len(approx))# 这里圆有8个点,# 具体的情况具体对待(方法的局限性)return shapeif __name__ == '__main__':image = cv2.imread('1.jpg')cv2.imshow("img", image)gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# cv2.imshow("gray", gray)# 高斯模糊去噪点blurred = cv2.GaussianBlur(gray, (5, 5), 0)# 二值化thresh = cv2.threshold(blurred, 230, 255, cv2.THRESH_BINARY_INV)[1]# cv2.imshow("thresh", thresh)# 轮廓检测count = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]print(type(count[0]), type([count[0]]))print(len(count[0]), len([count[0]]))# 这里对于count参数有点懵, type(count[0])为 <class 'numpy.ndarray'>for i in count:# 计算中心点坐标,方便我们制图M = cv2.moments(i)cX = int(M["m10"] / M["m00"])cY = int(M["m01"] / M["m00"])# 记录每个图像的种类shape = sort(i)cv2.drawContours(image, [i], -1, (0, 255, 0), 2)cv2.putText(image, shape, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)cv2.imshow("dst", image)cv2.waitKey(0)

思路:

  1. 导入图片->图片处理(RBG->Gray),高斯模糊去噪点,二值化->findContours(轮廓检测)
  2. 核心API:approxPolyDP(主要功能是把一个连续光滑曲线折线化)。在这里把findContours检测到的多边形的连续轮廓曲线进行折线化。

难点:approxPolyDP函数第二个参数的选择。这里我也不太清楚,我看到的解释都是说:一般我们用轮廓的周长的倍数作为阈值。这里我取了0.04倍的周长。在注释里我也说到了,在这里0.01会把小的三角形识别为长方形, 0.05会把圆识别为正方形。具体的情形具体对待。
这也是我对这个代码最不满意的地方。

运行结果:
在这里插入图片描述
当检测到圆的时候输出 检测到的折线的条数。结果显示为8. 这里的问题就是这种方法的局限性。按照道理来说这个方法除了8边形有点问题。其它的应该都是可以正常识别的。
在这里插入图片描述