python提取图像的内角直方图特征
时间: 2023-06-13 18:06:08 浏览: 56
提取图像的内角直方图特征可以通过以下步骤实现:
1. 读取图像并进行灰度化处理。
```python
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 对图像进行角点检测。
```python
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10)
corners = np.int0(corners)
```
3. 计算角点的内角度数。
```python
angles = []
for i in corners:
x, y = i.ravel()
for j in corners:
if i[0][0] != j[0][0] or i[0][1] != j[0][1]:
x1, y1 = j.ravel()
angle = np.arctan2(y1 - y, x1 - x) * 180 / np.pi
if angle < 0:
angle += 360
angles.append(angle)
```
4. 统计角度分布并画直方图。
```python
hist, bins = np.histogram(angles, bins=10, range=(0, 360))
plt.hist(angles, bins=10, range=(0, 360))
plt.xlabel('Angle (degrees)')
plt.ylabel('Frequency')
plt.title('Inner Corner Angle Histogram')
plt.show()
```
完整代码如下:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10)
corners = np.int0(corners)
angles = []
for i in corners:
x, y = i.ravel()
for j in corners:
if i[0][0] != j[0][0] or i[0][1] != j[0][1]:
x1, y1 = j.ravel()
angle = np.arctan2(y1 - y, x1 - x) * 180 / np.pi
if angle < 0:
angle += 360
angles.append(angle)
hist, bins = np.histogram(angles, bins=10, range=(0, 360))
plt.hist(angles, bins=10, range=(0, 360))
plt.xlabel('Angle (degrees)')
plt.ylabel('Frequency')
plt.title('Inner Corner Angle Histogram')
plt.show()
```