目錄
本文將使用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....