圓 最小外包矩形 Opencv實現最小外接矩形和圓

2021-10-13 11:42:31 字數 2267 閱讀 2909

步驟:將一幅影象先轉灰度,再canny邊緣檢測得到二值化邊緣影象,再尋找輪廓,輪廓是由一系列點構成的,要想獲得輪廓的最小外接矩形,首先需要得到輪廓的近似多邊形,用道格拉斯-普克抽稀(dp)演算法,道格拉斯-普克抽稀演算法,是將曲線近似表示為一系列點,並減少點的數量的一種演算法。

該演算法實現抽稀的過程是:

1)對曲線的首末點虛連一條直線,求曲線上所有點與直線的距離,並找出最大距離值dmax,用dmax與事先給定的閾值d相比:

2)若dmax

若dmax≥d,保留dmax對應的座標點,並以該點為界,把曲線分為兩部分,對這兩部分重複使用該方法,即重複1),2)步,直到所有dmax均

poly_rects[i] = boundingrect(contours_poly[i]);//從近似多邊形獲得最小外接矩形

minenclosingcircle(contours_poly[i], ccs[i], radius[i]);//從近似多邊形獲得最小外接圓

//多邊形點數大於5才能繪製帶方向的最小矩形和橢圓

if (contours_poly[i].size() > 5) {

minrects[i] = minarearect(contours_poly[i]);//從近似多邊形獲得帶方向的最小外接矩形

myellipse[i] = fitellipse(contours_poly[i]);//從近似多邊形獲得帶方向的最小外接橢圓

//繪製

src.copyto(dst);

point2f pts[4];

for (int j = 0; j < contours.size(); j++) {

scalar color = scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));

rectangle(dst, poly_rects[j], color, 2,8);

circle(dst, ccs[j], (int)radius[j], color, 2,8);

//繪製帶方向的最小外接矩形和橢圓

if (contours_poly[j].size() > 5) {

ellipse(dst, myellipse[j], color, 2);

minrects[j].points(pts);

for (int k = 0; k < 4; k++) {

line(dst, pts[k], pts[(k + 1)%4], color, 2);

imshow("output", dst);

執行結果如下:

Opencv實現最小外接矩形和圓

步驟 將一幅影象先轉灰度,再canny邊緣檢測得到二值化邊緣影象,再尋找輪廓,輪廓是由一系列點構成的,要想獲得輪廓的最小外接矩形,首先需要得到輪廓的近似多邊形,用程式設計客棧道格拉斯 普克抽稀 dp 演算法,道格拉斯 普克抽稀演算法,是將曲線近似表示為一系列點,並減少點的數量的一種演算法。該演算法實...

OpenCV輪廓 邊界框 最小矩形 最小閉圓檢測

import cv2 import numpy as np 函式cv2.pyrdown 是降低影象解析度,變為原來一半 將轉化為灰度,再進行二值化 ret,thresh cv2.threshold cv2.cvtcolor img.copy cv2.color bgr2gray 127,255,cv...

OpenCV 圓與矩形識別

最近乙個專案用到了影象識別,之前從未接觸過opencv,經過各種找教程,終於是搞懂了一些。整個具體流程大概是獲取影象 影象二值化,灰度圖 cvtcolor 影象降噪 gaussianblur 輪廓識別 cvfindcontours 形狀判斷。大多數教程很專業,各種引數分析看不懂,經過各種搜尋終於是搞...