c++ - 如何检测 90 度或 180 度的倾斜度?

标签 c++ opencv image-processing

在我的项目中,我处理我不知道它们是否倾斜的图像。

我使用 C++ 和 OpenCV。我尝试使用霍夫变换来确定倾斜角度:是 90 度还是 180 度。但它没有给出结果。

示例链接 image (full resolution TIFF) here

下图是按比例缩小并转换为 PNG 的全分辨率图像:

最佳答案

如果我想用霍夫线方法攻击你的图像,我会先做一个 Canny 边缘检测,然后找到霍夫线,然后查看生成的线。所以它在 ImageMagick 中看起来像这样 - 您可以转换为 OpenCV:

convert input.jpg \
   \( +clone -canny x10+10%+30%    \
      -background none -fill red   \
      -stroke red -strokewidth 2   \
      -hough-lines 9x9+150         \
      -write lines.mvg             \
   \)                              \
   -composite hough.png

enter image description here

lines.mvg 文件中,我可以看到检测到的各个行:

# Hough line transform: 9x9+150
viewbox 0 0 349 500
line 0,-3.74454 349,8.44281  # 160
line 0,55.2914 349,67.4788  # 206
line 1,0 1,500  # 193
line 0,71.3012 349,83.4885  # 169
line 0,125.334 349,137.521  # 202
line 0,142.344 349,154.532  # 156
line 0,152.351 349,164.538  # 155
line 0,205.383 349,217.57  # 162
line 0,239.453 349,245.545  # 172
line 0,252.455 349,258.547  # 152
line 0,293.461 349,299.553  # 163
line 0,314.464 349,320.556  # 169
line 0,335.468 349,341.559  # 189
line 0,351.47 349,357.562  # 196
line 0,404.478 349,410.57  # 209
line 349.39,0 340.662,500  # 187
line 0,441.484 349,447.576  # 198
line 0,446.484 349,452.576  # 165
line 0,455.486 349,461.578  # 174
line 0,475.489 349,481.581  # 193
line 0,498.5 349,498.5  # 161

我将您的图像调整为 349 像素宽(以使其适合 Stack Overflow 并加快处理速度),因此您可以看到有很多行从图像左侧的 0 开始到图像左侧的 349 结束右边告诉你他们穿过图像,而不是上下移动。此外,您还可以看到线条的右端通常比左端低 16 个像素,因此图像旋转了 tan inverse (16/349) 度。

关于c++ - 如何检测 90 度或 180 度的倾斜度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28538385/

相关文章:

matlab - 如何在matlab中屏蔽图像的一部分?

python - OpenCV Python 使用 HoughLinesP() 算法测量距离以确定水位

java - 文本识别库,Android、Java 代码?

opencv - IP 摄像机的 URL 视频流

c# - Emgu CV图像锐化和控制检测

android - 使用Android-OpenCV比较图片

c++ - 为什么我不能构建opencv WITH_QT?

c++ - 对一个数组进行排序,然后对另外两个数组进行排序

c++ - 如何在 C++ 中使用多维交错数组?

c++ - 如何在 Windows 上设置 cmake