python - 我将如何检测这两条线的角度?

标签 python opencv image-processing scikit-image hough-transform

enter image description here

正如您在图片中看到的,当一个人使用 map 时会生成一个圆锥体。我想知道是否可以检测到锥体的两条外线 like this但最终目标是使用此信息找到线条所在的角度。

我正在关注 this tutorial on hough-transform但最后是 this .如果可能,寻找一种更简单的方法来找到角度。

import numpy as np

from skimage.transform import hough_line
from scipy import misc

import matplotlib.pyplot as plt
from matplotlib import cm

image = misc.imread("cone.jpg", flatten=True)

# Classic straight-line Hough transform
h, theta, d = hough_line(image)

# Generating figure 1
fig, axes = plt.subplots(1, 3, figsize=(9, 3),
                         subplot_kw={'adjustable': 'box-forced'})
ax = axes.ravel()

ax[0].imshow(image, cmap=cm.gray)
ax[0].set_title('Input image')
ax[0].set_axis_off()

ax[1].imshow(np.log(1 + h),
             extent=[np.rad2deg(theta[-1]), np.rad2deg(theta[0]), d[-1], d[0]],
             cmap=cm.gray, aspect=1/1.5)
ax[1].set_title('Hough transform')
ax[1].set_xlabel('Angles (degrees)')
ax[1].set_ylabel('Distance (pixels)')
ax[1].axis('image')

ax[2].imshow(image, cmap=cm.gray)
for _, angle, dist in zip(*hough_line_peaks(h, theta, d)):
    y0 = (dist - 0 * np.cos(angle)) / np.sin(angle)
    y1 = (dist - image.shape[1] * np.cos(angle)) / np.sin(angle)
    ax[2].plot((0, image.shape[1]), (y0, y1), '-r')
ax[2].set_xlim((0, image.shape[1]))
ax[2].set_ylim((image.shape[0], 0))
ax[2].set_axis_off()
ax[2].set_title('Detected lines')

plt.tight_layout()
plt.show()

最佳答案

这是我的结果: enter image description here


你应该先引用这个: Detect Colored Segment in an image


我的步骤是:

  1. 将其转换为HSV,并得到S
  2. S 上精打细算
  3. 检测精巧的边缘,按一些标尺过滤。

关于python - 我将如何检测这两条线的角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864265/

相关文章:

python - 在 except block 之后执行(部分)try block

opencv - 如何使用OpenCV在白色背景上打印彩色文本

opencv - openCV中的多个功能2d.hpp

c++ - 将 cv::Mat 存储在字节数组中,以便将数据传输到服务器

python - 如何找到两个轮廓之间的距离

python - 如何确定递归中的最后一个堆栈空间

Python 脚本 - 电子邮件解析器

python - 图像噪声处理和边缘方向确定

python - 如何在循环期间更新 Django 查询集中的数据?

python - 使用python检测图像上的白色背景