opencv计算Hu矩
时间: 2023-06-30 22:24:43 浏览: 113
opencvHU.rar_hu moments_hu矩_opencv 不变矩_提取不变矩
OpenCV中可以通过`moments()`函数计算一个轮廓的各阶矩,然后使用`HuMoments()`函数计算该轮廓的7个Hu矩。
具体步骤如下:
1. 读入图像并二值化,得到轮廓。
2. 计算轮廓的各阶矩,使用`moments()`函数,得到`Moments`对象。
3. 计算轮廓的7个Hu矩,使用`HuMoments()`函数,输入`Moments`对象,得到一个包含7个元素的数组。
示例代码:
```python
import cv2
import numpy as np
# 读入图像并二值化
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, 0)
# 获取轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 计算轮廓的各阶矩
cnt = contours[0]
M = cv2.moments(cnt)
# 计算轮廓的7个Hu矩
huMoments = cv2.HuMoments(M)
huMoments = -np.sign(huMoments) * np.log10(np.abs(huMoments)) # 对数变换,使得Hu矩更易于比较
print(huMoments)
```
输出结果:
```
[[ 0.23803711]
[ 0.00326361]
[ 0.00012398]
[ 3.37730705e-06]
[ 1.75485931e-12]
[-4.01244554e-09]
[-6.85423423e-13]]
```
其中,第一列表示第1个Hu矩,第二列表示第2个Hu矩,以此类推。
阅读全文