OpenCv C 小案例實戰 物件提取

2021-09-05 08:45:58 字數 2468 閱讀 3709

現在比如說我有這麼一張圖:

我想要從中提取出"圓"的部分,那該怎麼做呢?用霍夫圓變換?no,萬一它不是乙個標準的圓呢?所以,這裡採用輪廓發現的方法來查詢"圓"。

解決思路:

1、二值化;

2、形態學操作(開運算+閉運算);

3、輪廓點查詢;

4、座標查詢。

首先將影象進行二值化,輪廓點查詢需要二值化影象。先使用閉操作去除最上面那一大塊中的白色小點,這可以把它叫做聯通。再使用開操作去除其餘的黑色小點。這樣操作之後我們就可以進行輪廓點查詢了,算出該區域的面積,如果面積<100(這個值可以根據情況取),則不會繪製輪廓。之後找出最小外接矩形,把它的長寬進行相除,如果該比例在1上下左右進行浮動,則被認為是該「圓」。

**:

#include#include#includeusing  namespace cv;

using namespace std;

mat src, binary, close_dst,open_dst;

int main(int argc, char** argv)

imshow("input image", src);

//二值化操作

threshold(src, binary, 0, 255, thresh_binary | thresh_otsu);

bitwise_not(binary, binary, mat());

imshow("binary image",binary);

/*---------------------形態學操作-------------------------*/

mat kernel = getstructuringelement(morph_rect, size(3, 3), point(-1, -1));

//閉操作,把中間的細小點聯通起來

morphologyex(binary, close_dst, morph_close, kernel, point(-1, -1));

imshow("close image", close_dst);

//開操作,去除多餘的點

kernel = getstructuringelement(morph_rect, size(7, 7), point(-1, -1));

morphologyex(binary, open_dst, morph_open, kernel, point(-1, -1));

imshow("open image", open_dst);

/*---------------------獲取物件輪廓-------------------------*/

mat dst = mat::zeros(src.size(), cv_8uc3);

vector > contours;

vectorhierachy;

point cc;

mat result_img = src.clone();

cvtcolor(result_img, result_img, cv_gray2bgr);

//rng rng((int)time(0));

for (size_t t = 0; t < contours.size(); t++) }

imshow("contours image", dst);

imshow("result image", result_img);

waitkey(0);

return 0;

}

執行結果:輸入:

進行二值化後的結果:

閉操作之後的結果:

可以看到,黑色小點被去除了。

開操作的結果:

這裡比較好,只進行了開操作就把其餘的小塊區域給去除了。

輪廓發現:

最後在原圖上顯示圓點座標:

OpenCv C 小案例實戰 切邊 一

假如說現在有這麼一張如下 現在我想要去掉這張圖外面的白色區域,只留下紅色線框以內的部分。最終效果如圖所示 放上 include include includeusing namespace cv using namespace std mat src,dst,gray src int current...

OpenCv C 小案例實戰 切邊 二

接上篇文章 一般的,乙個掃瞄的檔案是不可能完完全全擺正了的。它多多少少會有些傾斜。現在有如下 它逆時針進行了旋轉,那麼想要把多餘的白邊去掉且擺正應該怎麼做呢?步驟如下 1 邊緣檢測 2 找出輪廓 3 找出最小外接矩形,獲得旋轉的角度 4 根據旋轉的角度進行仿射變換 5 按切邊的操作進行 沒有用到的已...

實戰 python爬蟲經典小案例彙總

所有例項 github位址 開始最好模仿,不要自己寫,錯了找不到原因 應用 搶票,投票,報告分析,飲食地圖,輿情監控 儲存資料 的方法大概可以分為幾類 儲存文字 儲存二進位制檔案 包括 儲存到資料庫 1.首先是獲取目標頁面 2.解析獲取的網頁中的元素,唯一定位,取得自己想要的 借助各種庫工具,分析頁...