电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python 生成任意形狀的凸包圖代碼

瀏覽:4日期:2022-07-29 18:19:47

一、效果圖:

在左圖的白色區域周圍,畫任意形狀的凸包圖。

python 生成任意形狀的凸包圖代碼

二、代碼

import cv2import numpy as np def generate_poly(image, n, area_thresh): ''' 隨機生成凸包 :param image: 二值圖 :param n: 頂點個數 :param area_thresh: 刪除小于此面積閾值的凸包 :return: 凸包圖 ''' row, col = np.where(image[:, :, 0] == 255) # 行,列 point_set = np.zeros((n, 1, 2), dtype=int) for j in range(n): index = np.random.randint(0, len(row)) point_set[j, 0, 0] = col[index] point_set[j, 0, 1] = row[index] hull = [] hull.append(cv2.convexHull(point_set, False)) drawing_board = np.zeros(image.shape, dtype=np.uint8) cv2.drawContours(drawing_board, hull, -1, (255, 255, 255), -1) cv2.namedWindow(’drawing_board’, 0), cv2.imshow(’drawing_board’, drawing_board), cv2.waitKey() # 如果生成面積過小,重新生成 if cv2.contourArea(hull[0]) < area_thresh: drawing_board = generate_poly(image, n, area_thresh) # 如果生成洞,重新生成 is_hole = image[drawing_board == 255] == 255 if is_hole.all() == True: # 洞,則drawing_board所有為255的地方,image也是255,all()即為所有位置 drawing_board = generate_poly(image, n, area_thresh) return drawing_board img = np.zeros((256, 256, 3), np.uint8)cv2.circle(img, (100, 100), 50, (255, 255, 255), -1)cv2.namedWindow(’img’, 0), cv2.imshow(’img’, img), cv2.waitKey() img_hull = generate_poly(img, 8, 100)cv2.namedWindow(’img_hull’, 0), cv2.imshow(’img_hull’, img_hull), cv2.waitKey()

補充知識:opencv python 輪廓特征/凸包/外接矩形/外接圓/擬合矩形/擬合直線/擬合圓

Contour Features

1 圖像的矩

cv2.moments()

圖像的矩可以幫助計算物體的某些特征,如對象的質心,對象的區域等.

代碼:

import cv2import numpy as np img = cv2.imread(’img7.png’,0)ret,thresh = cv2.threshold(img,127,255,0)im2,contours,hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours[0]M = cv2.moments(cnt)print( M )

輸出:

{’m00’: 283.0, ’m10’: 8260.666666666666, ’m01’: 34747.666666666664, ’m20’: 251349.8333333333, ’m11’: 1008063.0, ’m02’: 4274513.166666666, ’m30’: 7941981.4, ’m21’: 30484543.9, ’m12’: 123258620.46666667, ’m03’: 526819846.70000005, ’mu20’: 10223.989595602674, ’mu11’: -6208.702394974302, ’mu02’: 8080.874165684916, ’mu30’: 8302.495426246896, ’mu21’: -14552.154961312423, ’mu12’: 11791.528133469663, ’mu03’: -3268.923251092434, ’nu20’: 0.12765785058625623, ’nu11’: -0.07752253611575, ’nu02’: 0.10089867729257346, ’nu30’: 0.006162296011483629, ’nu21’: -0.010800931752771139, ’nu12’: 0.008751933371317017, ’nu03’: -0.0024262672459139235}

此刻,可以提取有用的數據,如面積,質心等.

質心由關系給出:

cx = int(M[’m10’]/M[’m00’])cy = int(M[’m01’]/M[’m00’])

2輪廓面積

cv2.contourArea(contour[, oriented])

3輪廓周長

cv2.arcLength(curve, closed)

第二個參數指定形狀是否為閉合輪廓

4輪廓近似

它根據我們指定的精度將輪廓形狀近似為具有較少頂點數的另一個形狀.它是Douglas-Peucker算法的一種實現方式.

cv2.approxPolyDP(curve, epsilon, closed[, approxCurve])

第二個參數epsilon,它是從輪廓到近似輪廓的最大距離.第三個參數指定曲線是否閉合.

下面,在第二幅圖像中,綠線表示epsilon =弧長的10%的近似曲線. 第三幅圖像顯示相同的epsilon =弧長的1%.

代碼:

import cv2import numpy as np img = cv2.imread(’img8.png’)cv2.imshow(’src’,img)imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(imgray, 127, 255, 0)im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)cnt = contours[1] epsilon = 0.1*cv2.arcLength(cnt,True)approx = cv2.approxPolyDP(cnt,epsilon,True)cv2.polylines(img, [approx], True, (0, 0, 255), 2) cv2.imshow(’show’,img)cv2.waitKey()

python 生成任意形狀的凸包圖代碼

5凸包

凸包看起來類似輪廓近似,但是它不是(兩者在某些情況下可能提供相同的結果).

convexHull(points[, hull[, clockwise[, returnPoints]]]):檢查曲線的凸性缺陷并進行修正.

points:傳入的輪廓

hull:輸出

clockwise:方向標志,如果為True,則順時針方向輸出凸包.

returnPoints:默認情況下為True,然后它返回hull points的坐標; 如果為False,則返回與hull points對應的輪廓點的索引

下面的手形圖像. 紅線表示手的凸包, 雙面箭頭標記顯示凸起缺陷.

python 生成任意形狀的凸包圖代碼

代碼:

import cv2import numpy as np img = cv2.imread(’img8.png’) imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(imgray, 127, 255, 0)im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)cnt = contours[1] hull = cv2.convexHull(cnt)

returnPoints = True,得到以下值:

array([[[192, 135]], [[ 9, 135]], [[ 9, 12]], [[192, 12]]], dtype=int32)

如果想找到凸性缺陷,需要傳遞returnPoints = False,得到以下結果:

array([[129], [ 67], [ 0], [142]], dtype=int32)

這些是輪廓中相應點的索引,檢查第一個值:

cnt[129]Out[3]: array([[192, 135]], dtype=int32)

與第一個結果相同.

6 檢查凸性

cv2.isContourConvex(contour):檢查曲線是否凸起

7 外接矩形

7.1 直邊外接矩形

它是一個直的矩形,它不考慮對象的旋轉。因此,邊界矩形的面積不會最小.

cv.boundingRect()

設(x,y)為矩形的左上角坐標,(w,h)為寬度和高度

代碼:

import cv2import numpy as np img = cv2.imread(’img7.png’) imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(imgray, 127, 255, 0)im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)cnt = contours[0] x,y,w,h = cv2.boundingRect(cnt)cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) cv2.imshow(’show’,img)cv2.waitKey()

python 生成任意形狀的凸包圖代碼

7.2 最小外接矩形

cv.minAreaRect返回一個Box2D結構,其中包含以下detals - (center(x,y),(width,height),rotation of rotation)

cv.boxPoints畫上述矩形.

代碼:

rect = cv2.minAreaRect(cnt)box = cv2.boxPoints(rect)box = np.int0(box)cv2.drawContours(img,[box],0,(0,0,255),2)

python 生成任意形狀的凸包圖代碼

8 最小封閉圈

(x,y),radius = cv2.minEnclosingCircle(cnt)center = (int(x),int(y))radius = int(radius)cv2.circle(img,center,radius,(0,255,0),2)

python 生成任意形狀的凸包圖代碼

9 擬合橢圓

ellipse = cv2.fitEllipse(cnt)cv2.ellipse(img,ellipse,(0,255,0),2)

python 生成任意形狀的凸包圖代碼

10 擬合直線

rows,cols = img.shape[:2][vx,vy,x,y] = cv2.fitLine(cnt, cv2.DIST_L2,0,0.01,0.01)lefty = int((-x*vy/vx) + y)righty = int(((cols-x)*vy/vx)+y)cv2.line(img,(cols-1,righty),(0,lefty),(0,255,0),2)

python 生成任意形狀的凸包圖代碼

以上這篇python 生成任意形狀的凸包圖代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 永嘉县奥阳陶瓷阀门有限公司 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 | 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 上海橡胶接头_弹簧减震器_金属软接头厂家-上海淞江集团 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 | 河南凯邦机械制造有限公司| 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 灌装封尾机_胶水灌装机_软管灌装封尾机_无锡和博自动化机械制造有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 |