OpenCVのは、多くの場合、対象領域、周囲長、重心、バウンディングボックスなどを測定します
グラフィック幾何学的モーメントを求め、最小外接矩形の中心を決定達成パイソンを
インポートCV2の インポートのNPとしてnumpyの __author__ = " boboa " DEF :measure_demo(画像) 灰色 = cv2.cvtColor(画像、cv2.COLOR_BGR2GRAY) RET、脱穀 | = cv2.threshold cv2.THRESH_BINARY、255、0、(灰色cv2.THRESH_OTSU ) プリント(" 閾値" 、RET) cv2.imshow(" バイナリ" 、脱穀) outImage、輪郭、階層 = cv2.findContours(THRESH、cv2.RETR_EXTERNAL、cv2.CHAIN_APPROX_SIMPLE) 用の I、輪郭に列挙(等高線): #全体の輪郭横断 エリア= cv2.contourArea(輪郭) #1 cv2.boundingRect(H、W)、矩形の左上隅の4つのパラメータ(X、Y)座標を返す矩形の幅と高さであり 、X、 Y、W、H = cv2.boundingRect(輪郭) #は矩形サイズ外接 レート=分(W、H)/最大(W、H) #のアスペクト比 #の画像は、中央モーメントで計算され 、MM = cv2.moments(輪郭) CX =ミリメートル[ " MLO " ] /ミリメートル[ " M00 " ] CY =ミリメートル[ " M01 " ] /ミリメートル[ " M00 " ] #中心位置の幾何学的形状、MMは、辞書型である cv2.circle(画像、(np.int(CX)、np.int(CY))、2、(0、255、255)、-1 ) cv2.rectangle(画像、(X、Y)、(X + W、Y + H)、(0、0、255)、2) #は、矩形の外接 印刷(" 輪郭エリア" 、エリア) cv2.imshow(" その対策輪郭" 、イメージ) IF __name__ == " __main__ " : IMG = cv2.imread(" 画像/ 123.jpg " ) cv2.namedWindow(" 入力画像" 、cv2.WINDOW_AUTOSIZE) cv2.imshow(" 入力画像" 、IMG) measure_demo(IMG) cv2.waitKey(0) cv2.destroyAllWindows()
業績
フィッティングポリゴン(アプリケーション:ジオメトリが画像で選択されている) Pythonが実装
「」「 ApproxPolyDP(カーブ、イプシロン、クローズ[、approxCurve]) - > approxCurve 曲線適合カーブ イプシロンカーブフィッティングの資料番号(int型) クローズド適合曲線が閉じている(TrueまたはFalse) の多角フィッティング
」」 「 approxCurve = cv2.approxPolyDP(輪郭、10 、TRUE) 印刷(approxCurve.shape) #ポリゴンの数に適合するように輪郭>赤色パターン形状6に IF approxCurve.shape [0]> 6 : cv2.drawContours(DST、輪郭、I、(0,0、 255)、2 ) #青に適し多角形の輪郭パターン番号= 3の輪郭 のelif approxCurve.shape [0] == 3 : cv2.drawContours(DST、輪郭、I、( 255 、0、0)、2 ) #黄色のポリゴンの輪郭にフィットフィギュア輪郭の残りの数 、他: cv2.drawContours(DST、輪郭、I、(0、 255255)、2)