标签: hough-transform

Android OpenCV绘制Hough线

我试图在Android手机上使用OpenCV来检测线路.我修改了'Tutorial 1 Basic - 2.使用OpenCV Camera'样本.我也使用霍夫线变换作为例子.但是,我得到了奇怪的数字(至少我认为是奇怪的数字).b的范围是1000到-1000.

我不完全理解代码(主要是关于添加/减去1000*(a或-b)的部分).

最后我根本看不到线条.

有人能帮我一把吗?如果您需要更多信息,请与我们联系.

capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
Imgproc.Canny(mGray, mIntermediateMat, 80, 100);
Imgproc.HoughLines(mIntermediateMat, mLines, 1, Math.PI/180, 100);

Scalar color = new Scalar(0, 0, 255);

double[] data;
double rho, theta;
Point pt1 = new Point();
Point pt2 = new Point();
double a, b;
double x0, y0;
for (int i = 0; i < mLines.cols(); i++)
{
    data = mLines.get(0, i);
    rho = data[0];
    theta = data[1];
    a = Math.cos(theta);
    b = Math.sin(theta);
    x0 = a*rho;
    y0 …
Run Code Online (Sandbox Code Playgroud)

android opencv hough-transform

16
推荐指数
1
解决办法
2万
查看次数

Python如何使用OpenCV的HoughLines检测图像中的垂直和水平线?

我试图获得校准棋盘的阈值.当我观察微型棋盘时,我无法直接检测到棋盘角落,因为有一些灰尘.我尝试了几种方法,而HoughLinesP似乎是最简单的方法.但结果不好,如何提高我的成绩?

import numpy as np
import cv2

img = cv2.imread('lines.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
print img.shape[1]
print img.shape
minLineLength=100
lines = cv2.HoughLinesP(image=edges,rho=0.02,theta=np.pi/500, threshold=10,lines=np.array([]), minLineLength=minLineLength,maxLineGap=100)

a,b,c = lines.shape
for i in range(a):
    cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA)
    cv2.imwrite('houghlines5.jpg',img)
Run Code Online (Sandbox Code Playgroud)

正如你在下图所示,我无法获得我的棋盘,线条被绘制在很多方向......(原始图片:https://s22.postimg.org/iq2b91xq9/droite_Image_00000.jpg)

在此输入图像描述

python opencv hough-transform camera-calibration

15
推荐指数
1
解决办法
2万
查看次数

找到使用houghlines opencv绘制的两条线的交点

如何使用opencv Hough线算法获得线的交点?

这是我的代码:

import cv2
import numpy as np
import imutils

im = cv2.imread('../data/test1.jpg')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 60, 150, apertureSize=3)

img = im.copy()
lines = cv2.HoughLines(edges,1,np.pi/180,200)

for line in lines:
    for rho,theta in line:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 3000*(-b))
        y1 = int(y0 + 3000*(a))
        x2 = int(x0 - 3000*(-b))
        y2 = int(y0 - 3000*(a))
        cv2.line(img,(x1,y1),(x2,y2),(0,255,0),10)

cv2.imshow('houghlines',imutils.resize(img, height=650))
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

输出:

产量

我想得到所有的交点.

python opencv numpy hough-transform

15
推荐指数
3
解决办法
2万
查看次数

人工环境中的车道检测

我正在编写一个可以在驾驶模拟器中检测车道的应用程序.环境相对简单,大多是直的多车道道路,几乎没有曲率.目前,我可以使用(经典)Hough变换成功检测到线条,但问题是HT自然也会检测到不是车道的线条.

我怎样才能更有选择性?我没有绘制水平线,但仍然有一些线路进入.理想情况下,我想检测车辆行驶的车道边界.以下是环境的典型图像

环境

这是我到目前为止所做的事情:

    1.因为我开车的地方环境差不多,所以我设置了感兴趣的区域(RoI)以排除地平线及其上方的任何东西.
    2.对图像进行阈值处理(我将稍微解释一下阈值的原因)
    3. Canny边缘检测
    4.应用霍夫变换
    5.绘制检测到的线,不包括具有0.0或接近0.0的梯度的线

成像阈值的原因如下.如果你看一下上面链接的环境照片,你会看到一条平行于道路的灰色线条.因为它是一条连续线 - 与车道标记不同 - HT最终检测到它.我不能基于渐变来排除它,因为它具有与车道标记相同的梯度.通过阈值处理,我可以删除它,因此只检测作为实际车道标记的线.

这是上述操作的结果

霍夫变换

我知道这个问题有很多解决方案,我已经阅读了无数的论文,但它们似乎都处理的环境比这复杂得多,而且/或者只是简单的方式.为了它的价值,仅仅一个多月前,我没有ComputerVision的背景,所以这对我来说都是非常新的.

更新1:

我想用更好的术语来说,我正在寻找一种模拟车道的方法,以便不包括不适合模型的线.不幸的是,我不知道从哪里开始使用模型.有什么建议?

为了它的价值,我已经设法识别出车辆在其中行驶的车道,并且可以排除不属于"主动"车道的额外线路,可以这么说.希望这张照片会有所帮助

截图

它不完美,但我猜它.在建模之后,我的最终目标是生成车辆的航向/位置.但我只是想首先获得相对强大的车道检测.我希望有一种相对简单的技术可以帮助实现这一点(不依赖于系统的参数,例如视场的焦距).

computer-vision hough-transform

14
推荐指数
1
解决办法
3195
查看次数

如何分割弯杆进行角度计算?

我正在尝试使用OpenCV从它的背景中分割弯曲的杆,然后在其中找到弯曲并计算每个弯曲之间的角度.

幸运的是,第一部分是微不足道的,前景和背景之间有足够的对比.在分割时,一些侵蚀/扩张会处理反射/高光.

第二部分是我不知道如何处理它的地方.

我可以轻松地检索轮廓(顶部和底部非常相似,所以要么会这样做),但我似乎无法弄清楚如何将轮廓分成直线部分和弯曲杆来计算角度.

到目前为止,我已经尝试过简单地修复轮廓,但要么我得到太多或太少的点,并且感觉很难确定正确的设置以保持笔直部分和弯曲部分简化.

这是我的输入图像(bend.png)

bend.png

这是我到目前为止所尝试的内容:

#!/usr/bin/env python
import numpy as np
import cv2

threshold = 229
# erosion/dilation kernel
kernel = np.ones((5,5),np.uint8)
# contour simplification
epsilon = 0

# slider callbacks
def onThreshold(x):
    global threshold
    print "threshold = ",x
    threshold = x
def onEpsilon(x):
    global epsilon
    epsilon = x * 0.01
    print "epsilon = ",epsilon

# make a window to add sliders/preview to
cv2.namedWindow('processed')
#make some sliders
cv2.createTrackbar('threshold','processed',60,255,onThreshold)
cv2.createTrackbar('epsilon','processed',1,1000,onEpsilon)
# load image
img = cv2.imread('bend.png',0)
# continuously process …
Run Code Online (Sandbox Code Playgroud)

python geometry opencv computer-vision hough-transform

14
推荐指数
1
解决办法
585
查看次数

OpenCV Hough最强的线条

OpenCV中的HoughLines或HoughLinesP函数是否像HoughCircles函数一样以累加器顺序返回行列表?我想知道线的排序.获得线路的累加器值也非常方便,因此可以使用智能和自适应阈值而不是固定阈值.是否可以使用排序或累加器值而无需自行重写OpenCV

opencv hough-transform

13
推荐指数
1
解决办法
5602
查看次数

如何在python中使用cv2中的hough圈?

我有以下代码,我想检测圆圈.

   img = cv2.imread("act_circle.png")
   gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
   circles = cv2.HoughCircles(gray,cv2.CV_HOUGH_GRADIENT)
Run Code Online (Sandbox Code Playgroud)

看起来它没有属性,错误如下

'module' object has no attribute 'CV_HOUGH_GRADIENT'
Run Code Online (Sandbox Code Playgroud)

有谁知道这个隐藏参数在哪里?

谢谢

python geometry opencv hough-transform

12
推荐指数
3
解决办法
2万
查看次数

Python和OpenCV - 改进我的车道检测算法

我需要从视频中检测道路车道.这是我的方式.

  1. 通过切片图像确定感兴趣区域(ROI)(聚焦中间部分)
  2. 灰度ROI
  3. 将灰度级投资回报率与平均值相等 cv2.equalizeHist
  4. 将高斯模糊应用于(3)
  5. 阈值(4)使用 cv2.adaptiveThreshold
  6. Skeletonize(5)使用 skimage.morphology.skeletonize
  7. 适用cv2.HoughLines于(6)

对于cv2.HoughLines,我设置为:

  1. 如果rho是正的(这意味着直线向右倾斜(自下而上),它只会绘制线条,如果它处于某个角度(我设置了角度的范围))
  2. 如果rho是负数(直线向左倾斜(自下而上),只有在特定角度时才会绘制直线)

这是我绘制线条的代码:

lines = cv2.HoughLines(image_bin, 1, np.pi/180, 50)
    try:
        range = lines.shape[0]
    except AttributeError:
        range = 0

    for i in xrange(range):
        for rho, theta in lines[i]:
            if rho > 0 and (np.pi*1/10 < theta < np.pi*4/10):
                a = np.cos(theta)
                b = np.sin(theta)
                x0 = a * rho
                y0 = b * rho
                x1 = int(x0 + 1000 * (-b)) …
Run Code Online (Sandbox Code Playgroud)

python algorithm opencv image-processing hough-transform

12
推荐指数
1
解决办法
9477
查看次数

广义Hough变换和OpenCv

我正在寻找一个广义Hough变换的OpenCv实现,或者至少在c ++中.尽管我搜索了一段时间,但我还是找不到任何有趣的东西.有什么建议吗?

c++ opencv hough-transform

11
推荐指数
1
解决办法
1万
查看次数

将坐标分裂为3个子空间以解决无界

我正在尝试实现Cascaded Hough Transform(我已经实现了'普通'版本.)但我无法理解以下内容:

在图像上应用HT后,我在霍夫空间中留下了直线.HT的级联版本要求我将霍夫空间分成3个子空间,以便解决无界值的问题.

我该怎么做呢?

这是霍夫空间如何分裂的图片: 替代文字

为了在保持对称空间对偶性的同时恢复参数空间的有界性,我们将(a,b) - 空间分成三个有界子空间,如下图所示.第一个子空间也有坐标a和b,但仅适用于| a | <= 1和| b | <= 1.如果| a | > 1和| b | <= | a | ,点(a,b)在第二个子空间中出现,坐标为1/a和b/a.如果,最后,| b | > 1和| a | <| b |,我们使用坐标为1/b和a/b的第三个子空间.

这是我感到非常困惑的地方,假设我在霍夫空间中有一条线.如果它违反了|将如何拆分 a | <= 1和| b | <= 1?

我是否只是遍历线中的所有像素,如果有问题的像素的坐标大于| a | <= 1和| b | <= 1,我在第二个子空间中绘制它?

如果在Stack Overlow上不欢迎这类问题,我深表歉意 - 是否有其他网站可以提出有关算法的问题?

图片来源和上述报价

algorithm image-processing hough-transform

9
推荐指数
1
解决办法
241
查看次数