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

关于网站建设心得体会小程序主题wordpress

关于网站建设心得体会,小程序主题wordpress,wordpress实现专题,临淄关键词网站优化哪家好目录 一、多边形的逼近 二、凸包 一、多边形的逼近 findContours后的轮廓信息countours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似,这就是轮廓的多边形逼近。 apporxPolyDP就是以多边形去逼近轮廓,采用的是Doug…

目录

一、多边形的逼近

二、凸包


一、多边形的逼近

findContours后的轮廓信息countours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似,这就是轮廓的多边形逼近。

apporxPolyDP就是以多边形去逼近轮廓,采用的是Douglas-Peucker算法(方法名中的DP)

DP算法原理比较简单,核心就是不断去找多边形最远的点加入形成新的多边形,直到最短距离小于指定的精度(阈值)

approxPolyDP(curve, epsilon, closed[, approxCurvel])

  • curve 要逼近的轮廓
  • epsilon 即DP算法使用的阈值
  • closed 轮廓是否闭合

阈值越大,逼近效果越粗糙;阈值越小,逼近效果越好。

得到的approx本质是一个数组ndarray类型,因此画轮廓的时候需要加上[]变成列表类型。

示例代码如下:

import cv2
import numpy as np
# 导入图片
hand = cv2.imread("hand.png")
# 变为单通道黑白图片
gray = cv2.cvtColor(hand, cv2.COLOR_BGR2GRAY)
# 二值化操作
ret, new_img = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(new_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 复制一份原图
hand_copy = hand.copy()
# 直接在img_copy上面操作
cv2.drawContours(hand_copy, contours, -1, (0, 0, 255), 2)
# 使用多边形逼近,近似模拟手的轮廓
approx = cv2.approxPolyDP(contours[2], 20, closed=True)
# approx本质上是一个轮廓数据,是一个ndarray类型
print(approx)
print(type(approx))
# 二contours是一个元组/列表类型
# 画出近似逼近的轮廓
cv2.drawContours(hand_copy, [approx], -1, (0, 255, 0), 2)
cv2.imshow("img", np.hstack((hand, hand_copy)))
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

二、凸包

逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。 凸包和逼近多边形很像,只不过它是物体最外层的凸多边形。凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都凸的,即在凸包内连接任意两点的直线都在凸包的内部。在凸包内,任意连续三个点的内角小于180°。

convexHull(points[,hull [,clockwise[, returnpoints]]]])

  • points 即轮廓
  • colckwise 顺时针绘制

示例代码如下:

import cv2
hand = cv2.imread("hand.png")
# 二值化操作
gray = cv2.cvtColor(hand, cv2.COLOR_BGR2GRAY)
# 二值化操作
thresh, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(hand, contours, 0, (0, 0, 255), 2)
# 多边形逼近
approx = cv2.approxPolyDP(contours[2], 20, True)
# 画出多边形逼近的轮廓
cv2.drawContours(hand, [approx], 0, (0, 0, 255), 2)
# 计算凸包
hull = cv2.convexHull(contours[2])
# 画出凸包
cv2.drawContours(hand, [hull], 0, (255, 0, 0), 2)
cv2.imshow("hand", hand)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

http://www.dtcms.com/wzjs/543678.html

相关文章:

  • 网站如何建设目录抖音代运营赚钱吗
  • 免费网站制作 优帮云建网站收费多少钱
  • 广州网站建设网络推广公司山西网站建设公司
  • 网站icp备案号查询办公室装修费怎么做账
  • 我的世界用自己皮肤做壁纸网站做淘宝还有必要做网站吗
  • 网站建设架构细节北京市建设工程造价管理处网站
  • 外贸门户网站外网域名购买
  • 中国电力建设集团有限公司网站网站优化西安
  • 网站建设总体说明世界上让导航崩溃的城市
  • 深圳福田网站制作公司赣榆建设局网站
  • 新郑做网站优化铁路网站建设论文
  • 网站如何推广出去wordpress后台不能登陆
  • 专门做家居的网站zencart网站管理 1.5
  • 应付网站软件服务怎么做分录重庆网站托管外包公司哪家好
  • 企业门户网站建设优势wordpress内存慢慢身高
  • 微信商城平台南京网站关键词优化咨询
  • 360免费建站不要钱网站建设预付
  • 中国建设网官方网站电子银行建设银行 企业网站
  • 汕头h5建站模板网站流量成本
  • 程序员给传销做网站广州哪个区最适合打工
  • 福田网站建设论文结论下载建程网
  • 张家口网站建设zjktao台州做网站的公司
  • 老外做的汉字网站网页翻译用什么软件
  • 用墨刀做视频网站学院网站建设开题报告
  • 网站导航作用速卖通开店流程及费用
  • 江苏建设厅网站查询网页设计素材网站集
  • 芜湖网站建设芜湖狼道网站服务器租用时间
  • 杭州seo教程seo外包公司费用
  • 建设网站过程第一阶段公司网站界面设计
  • 网站首页新世纪建设集团有限公司南漳网站制作