日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:34日期: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 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品视频高潮| 91免费精品| 国产资源在线观看入口av| 国产精品亚洲片在线播放| 日韩精品三区四区| 亚洲精品亚洲人成在线观看| 国产一区二区精品| 日韩欧美在线中字| 福利一区二区三区视频在线观看| 国产亚洲高清在线观看| 国产伦理一区| 美女性感视频久久| 青青草国产成人99久久| 国产亚洲字幕| 日产欧产美韩系列久久99| 中日韩男男gay无套| 国产一级一区二区| 国产三级精品三级在线观看国产| 青草国产精品久久久久久| 久久不卡国产精品一区二区| 精品久久福利| 日本vs亚洲vs韩国一区三区二区| 久久久人人人| 狠狠色综合网| 久久精品国产www456c0m| 视频一区视频二区中文字幕| 国产亚洲精品v| 国产毛片一区二区三区| 亚洲国产专区校园欧美| 日韩福利在线观看| 神马日本精品| 91国内精品| 三上悠亚国产精品一区二区三区| 视频一区二区三区入口| 色婷婷色综合| 日韩精品亚洲一区二区三区免费| 日本精品黄色| 免费精品视频| 精品欧美一区二区三区在线观看| 日韩精品视频一区二区三区| 欧美 日韩 国产精品免费观看| 国产日韩欧美一区| 亚洲一区网站| 久久久蜜桃一区二区人| 国产亚洲一区| 亚洲一区亚洲| 亚洲电影有码| 色婷婷色综合| 国产一区二区三区不卡av| 日韩福利视频一区| 亚洲97av| 中文字幕av亚洲精品一部二部 | 欧美激情一区| 日韩高清中文字幕一区| 热久久免费视频| 国产婷婷精品| 国产亚洲精品v| 成人看片网站| 91精品亚洲| 亚洲性视频h| 亚洲神马久久| 亚洲五月综合| 日本不卡在线视频| 久久激情五月激情| 国产日产高清欧美一区二区三区| 在线视频精品| 美女被久久久| 一区二区亚洲视频| 欧美影院精品| 久久av国产紧身裤| www.九色在线| 欧美在线资源| 久热综合在线亚洲精品| 四虎在线精品| 国产黄色精品| 久久久夜夜夜| 蜜臀精品久久久久久蜜臀| 亚洲精品在线二区| 久久香蕉网站| 婷婷亚洲综合| 中文字幕一区二区三区日韩精品| 欧美日韩一区二区三区不卡视频| 久久伊人国产| 亚洲精品网址| 国产精品第十页| 黑人精品一区| 免费日韩av片| 精品国产亚洲一区二区在线观看| 欧美色图一区| 国产精品极品| 99国产精品久久久久久久成人热 | 欧美日韩国产高清| 蜜臀久久久久久久| 亚洲国产福利| 久久亚洲国产精品一区二区| 麻豆精品av| 亚洲一区日韩| 欧洲亚洲一区二区三区| 亚洲网址在线观看| 99精品综合| 精品黄色一级片| 亚洲香蕉久久| 欧美亚洲精品在线| 久久a爱视频| 日韩av中文在线观看| 亚洲午夜av| 鲁鲁在线中文| 毛片不卡一区二区| 日韩欧美中文字幕在线视频| 精品视频高潮| **爰片久久毛片| 石原莉奈一区二区三区在线观看| 日韩天堂在线| 精品久久福利| 精品视频在线观看网站| 国产精品日韩精品在线播放| 老鸭窝毛片一区二区三区| 久久精品国产亚洲夜色av网站 | 91精品福利观看| 亚洲乱码视频| 中文字幕视频精品一区二区三区| 久久青草久久| 欧美91精品| 日韩伦理福利| 国产精品久久久久av电视剧| 精品国产成人| 国产成人精品一区二区三区视频 | 亚洲精品精选| 亚洲精品第一| 国产欧美一区二区色老头| 欧美啪啪一区| 欧美精品导航| 国产资源在线观看入口av| 日韩毛片在线| 在线亚洲观看| 日韩欧美三区| 日韩精选在线| 国产精品一区二区精品 | 综合激情网站| 欧美日韩一区自拍| 精品午夜av| 欧美影院三区| 亚洲欧洲国产精品一区| 国产调教精品| 欧美日韩国产v| 亚洲影院天堂中文av色| 久久爱www成人| 在线精品小视频| 国产精品一区二区三区av| 日韩啪啪电影网| 久久中文字幕av一区二区不卡| 日韩午夜精品| 精品国产成人| 日韩一区二区三区免费视频| 麻豆精品视频在线观看| 91精品电影| 欧美激情三区| 久久电影一区| 国产成人精选| 日韩高清不卡在线| 四虎4545www国产精品| 日韩av一区二区在线影视| 波多野结衣久久精品| 日本视频中文字幕一区二区三区| 日本一二区不卡| 制服诱惑一区二区| 黑人精品一区| 欧美日韩亚洲一区三区| 午夜国产欧美理论在线播放| 日韩精品三区四区| 好看不卡的中文字幕| 你懂的国产精品永久在线| 99re国产精品| 少妇精品导航| 精品视频亚洲| 久久av网站| 国产精品主播在线观看| 先锋影音久久久| 亚洲精品中文字幕乱码| se01亚洲视频| 高清在线一区| 欧美激情福利| 国产精品极品在线观看| 亚洲ww精品| 日本成人在线一区| 中文字幕一区二区三区在线视频| 亚洲欧美日韩高清在线| 在线日韩中文| 午夜国产一区二区| 日韩视频精品在线观看| 亚洲精品一区二区在线看| 久久久9色精品国产一区二区三区| 麻豆视频久久| 成人国产精品| 91精品精品| 欧美1区免费| 视频在线观看一区| 亚洲色图综合| 国产精品一区免费在线| 国产精品chinese|