【问题标题】:How to detect and calculate an angle in image? (spray)如何检测和计算图像中的角度? (喷)
【发布时间】:2021-03-02 07:05:18
【问题描述】:

我正在尝试编写代码来查找二进制处理后的喷嘴喷射角度(图像)。我读了一些关于霍夫变换的东西来做到这一点,但我无法正确应用。 (Calculating the angle between two lines in an image in PythonHow to find angle of hough lines detected?

有一段时间我有这个:

import cv2 
import numpy as np  
import math
import matplotlib.pyplot as plt

img_grey = cv2.imread('sprayang.jpg', cv2.IMREAD_GRAYSCALE)
img = cv2.GaussianBlur (img_grey, (5,5), 0)

th = 0
max_val = 255

    ret, o1 = cv2.threshold(img, th, max_val, cv2.THRESH_BINARY + cv2.THRESH_OTSU )

生成的图像是:

使用 ImageJ 中的角度测量工具,我测量了大约 90°。

【问题讨论】:

    标签: math binary angle


    【解决方案1】:
    1. 投射 2 条水平光线(从每个方向)

    2. 用喷雾找到第一击

      让我们从左边调用二维点p0,p1p2,p3

    3. 计算角度

      2D 中 2 个向量之间较小的无符号角由点积定义,如下所示:

      ang = acos( dot( p1-p0 , p2-p1 ) / (|p1-p0|*|p2-p1|) )
      
                               (x1-x0)*(x2-x1) + (y1-y0)*(y2-y1)
      ang = acos( ------------------------------------------------------------- )
                  sqrt( (x1-x0)^2 + (y1-y0)^2 ) * sqrt( (x2-x1)^2 + (y2-y1)^2 )
      

    【讨论】:

    • 我会尝试从这个开始,Spektre。但是,说真的,我不是很明白。这个水平射线是特定的吗?比如,如果我改变图像,我也会改变那个值吗?
    • @ViniciusCarreira 不,您不需要更改图像(除非您想进行调试)只需选择一些 y 然后 for 循环通过 x 从 0 到宽度(反之亦然相反的方向),读取像素(x,y)值,如果不是背景停止并记住最后一个x ...选择y值,以便一个靠近喷雾锥的起点,一个靠近底部...手动通过鼠标或硬编码或来自 BBOX ...
    猜你喜欢
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2016-11-06
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多