OpenCV實戰之基於Hu矩實現輪廓匹配

2022-09-22 00:15:08 字數 1791 閱讀 1125

目錄

本文將使用opencv c++ 基於hu矩進行輪廓匹配。

原圖測試圖

vector>findcontour(mat image)

} return effectconts;

}如圖所示,這就是找到的最外輪廓。接下來,我們基於輪廓進行匹配。

opencv提供moments api計算影象的中心矩;humoments api用於中心矩計算hu矩。關於moments humoments相關知識請大家自行查詢。    

moments m_test = moments(test_contours[0]);

mat hu_test;

humoments(m_test, hu_test);

double mindis = 1000;

int minindex = 0;

for (int i = 0; i < src_contours.size(); i++)

}上面**段大致思路是:首先計算測試圖的hu矩;然後使用乙個for迴圈計算原圖中所有輪廓的hu矩,依次計算兩hu矩的相似程度。在這裡使用matchshapes api計算兩個rxrnrcdnehu矩。函式返回值代表兩hu矩的相似程度。完全相同返回值為0。即這裡通過計算兩hu矩的相似程度,找到返回值最小的那個作為成功匹配。

drawcontours(src, src_contours, minindex, scalar(0, 255, 0), 2);

rect rect = boundingrect(src_contours[minindex]);

rectangle(src, rect, scalar(0, 0, 255), 2);

最終效果如圖所示。

#include

#include

using namespace std;

using namespace cv;

vector>findcontour(mat image)

} return effectconts;

}int main()

vector>src_contours;

vector>test_contours;

src_contours = findcontour(src);

test_contours = findcontour(test);

moments m_test = moments(test_contours[0]);

mat hu_test;

humoments(m_test, hu_test);

double mindis = 1000;

int minindex = 0;

for (int i = 0; i < src_contours.size(); i++) }

drawcontours(src, src_contours, minindex, scalar(0, 255, 0), 2);

rect rect = boundingrect(src_contours[minindex]);

rectangle(src, rect, scalar(0, 0, 255), 2);

imshow("test", test);

imshow("demo", src);

waitkey(0);

system("pause");

return 0;

}本文使用opencv c++基於hu矩輪廓匹配,關鍵步驟有以下幾點。

1、查詢輪廓。在這裡,我是基於最外輪廓進行匹配。

2、計算輪廓的hu矩,然後使用matchshapes計算兩hu矩的距離,以此來判斷匹配程度。

OpenCV學習三十二 HU矩以及Zernike矩

cv moments inputarray array,bool binaryimage false array 輸入陣列,可以是光柵影象 單通道,8 bit或浮點型二維陣列 或者是乙個二維陣列 1 x n或n x 1 二維陣列型別為point或point2f 我記得這裡輸入二值和 findcont...

opencv手冊 OpenCV之單目測距實現

最近要做乙個小專案,要完成相機的測距實現,最先考慮的是三角雷射測距,但是實現起來太麻煩了,基本要搭乙個簡易的雷射測距雷達.然後是雙目測距,然而乙個便宜的雙目工業相機也要四五百,而且以前也沒接觸過雙目測距.於是就想試試單目測距的效果怎麼樣,通過參考網路上的各種資料,加上以前玩過三角雷射測距,所以也算比...

基於python的opencv專案實戰P4

形態學 腐蝕操作import cv2 import matplotlib.pyplot as plt import numpy as np get ipython run line magic matplotlib inline 腐蝕dige img cv2.imread dige.png cv2....