标签: hough-transform

使用Hough OpenCV时出错

如果我不执行任何操作(即不通过控制窗口更改颜色检测 HSV),则应用程序运行正常。但是,如果我在应用程序运行时更改 HSV 值,则会收到以下错误。我已经在没有霍夫的情况下测试了代码,它运行良好。

CPU 错误 -

HoughFinder.exe 中 0x00007FF9ECA64388 (ucrtbase.dll) 处出现未处理的异常:将无效参数传递给认为无效参数致命的函数。

这是我的代码 -

VideoCapture capture(0); // 0 is my webcam

...

capture.read(displayOriginal))
...(Code to detect colors for extra accuracy)
cudaCanny->detect(imgThresholded, imgCanny);

vector<Vec2f> lines;
//Ptr<HoughLinesDetector> hough = createHoughLinesDetector(1, CV_PI / 180, 100); CUDA code...
//hough->detect(imgCanny, lines); CUDA code...
HoughLines(displayCanny, lines, 1, CV_PI / 180, 100, 0, 0); // CPU code...
    for (size_t i = 0; i < lines.size(); i++)
    {
        float rho = lines[i][0], theta = lines[i][1];
        Point pt1, pt2; …
Run Code Online (Sandbox Code Playgroud)

c++ opencv hough-transform

4
推荐指数
1
解决办法
1563
查看次数

在 OpenCV 中使用 inRange() 检测范围内的颜色

我正在用 OpenCV 编写一个用于月球陨石坑检测的 C++ 程序,它似乎只能准确地检测到一小部分陨石坑。我对这种方法的策略是首先将图像转换为 HSV,然后用于inRange()捕捉一系列值中的颜色以产生阈值,然后对其进行高斯模糊并用于HoughCircles()检测圆圈。

我不完全理解的一件事是,当我inRange()在颜色周围设置低阈值和高阈值时,它根本不会返回任何内容。只是一个黑色的图像。它仅在我将低阈值设置为时才有效,Scalar(0,0,0)但我认为这会使其有些不准确。有什么我不明白的吗?我的测试图像如下。

月球表面 在此处输入图片说明

这是我用来测试此图像的代码:

#include <cstdio>
#include <iostream>

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/features2d/features2d.hpp"

using namespace std;
using namespace cv;

int main(int argc, char** argv) {
    // using namespace cv;

    printf("%s\n", argv[1]);
    Mat src=imread(argv[1]);

    if (!src.data) {
        std::cout << "ERROR:\topening image" <<std::endl;
        return -1;
    }

    // converts the image to hsv so that circle detection is more accurate
    Mat hsv_image;
    cvtColor(src, hsv_image, COLOR_BGR2HSV);
    // high …
Run Code Online (Sandbox Code Playgroud)

c++ opencv feature-detection hough-transform

4
推荐指数
1
解决办法
6990
查看次数

在知道这些线条的角度的情况下,在质量很差的图像上查找线条的最佳方法是什么?

我试图用 Houghlines 变换找到这两条水平线。正如你所看到的,图像非常嘈杂!目前我的工作流程如下所示:

  • 裁剪图像

  • 模糊它

  • 降低噪声(为此,我反转图像,然后将模糊图像减去反转图像)

  • 打开它并使用“水平内核”对其进行扩展(kernel_1 = np.ones((10,1), np.uint8)

  • 临界点

  • 胡格林斯

结果不如预期...是否有更好的策略,知道我将始终搜索水平线(因此,abs(theta)将始终接近 0 或 pi

我的原始图像在这里

阈值结果

python opencv hough-transform

4
推荐指数
2
解决办法
523
查看次数

如何在Java中实现Hough Circle

我想找一个圆形物体(眼睛的虹膜,我使用Haar Cascase和中提琴琼斯算法).所以我发现霍夫圈是正确的方法.任何人都可以解释我如何在Java中实现霍夫圈或任何其他简单的实现来用Java找到虹膜.

谢谢,

java image-processing computer-vision hough-transform

3
推荐指数
1
解决办法
3939
查看次数

你如何将X,Y点转换为Rho,Theta在C中进行霍夫变换?

所以我试图在C上编码Hough变换.我有一个二进制图像并从图像中提取了二进制值.现在做霍夫变换我必须将图像中的[X,Y]值转换为[rho,theta]来进行形式的参数变换

RHO = xcos(THETA)+ ysin(THETA)

我不太明白它是如何实际转换的,看看其他在线代码.任何帮助解释算法以及如何根据[X,Y]完成[rho,theta]值的累加器将不胜感激.谢谢.提前.:)

c hough-transform

3
推荐指数
1
解决办法
5564
查看次数

HoughLines在opencv中进行转换

我正在使用opencv和Eclipse进行图像处理.

  vector<Vec2f> lines;  
  HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );

  for( size_t i = 0; i < lines.size(); i++ )  
  {  
     float rho = lines[i][0], theta = lines[i][1];  
     Point pt1, pt2;  
     double a = cos(theta), b = sin(theta);  
     double x0 = a*rho, y0 = b*rho;  
     pt1.x = cvRound(x0 + 1000*(-b));  
     pt1.y = cvRound(y0 + 1000*(a));  
     pt2.x = cvRound(x0 - 1000*(-b));  
     pt2.y = cvRound(y0 - 1000*(a));  
     line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);  
  }  
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这个代码如何定义点.我们正在使用

y=(-cos(theta)/sin(theta))x + r/(sin(theta))
rho=xo*cos(theta) + …
Run Code Online (Sandbox Code Playgroud)

c++ opencv hough-transform

3
推荐指数
1
解决办法
6657
查看次数

为什么HoughCircles在尝试检测虹膜时返回0个圆?

我试图检测眼睛的虹膜,但HoughCircles返回0圈。

输入图像(眼睛)为:

输入图像

然后,使用此图像进行以下操作:

cvtColor(eyes, gray, CV_BGR2GRAY);
morphologyEx(gray, gray, 4,cv::getStructuringElement(cv::MORPH_RECT,cv::Size(3,3)));
threshold(gray, gray, 0, 255, THRESH_OTSU);
vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2, gray.rows/4);
if (circles.size())
        cout << "found" << endl;
Run Code Online (Sandbox Code Playgroud)

因此,最终的灰色图像如下所示:

输出图像

我已经发现了使用HoughCircles来检测和测量瞳孔和虹膜的问题,但尽管与我的问题相似,但它并没有帮助我。

那么为什么HoughCircles在尝试检测虹膜时返回0圈呢?如果有人知道找到虹膜的更好方法,欢迎您。

opencv detection hough-transform iris-recognition

3
推荐指数
1
解决办法
2073
查看次数

Opencv HoughLines Lines Theta?

我有一个关于HoughLines的opencv库的问题.格式如下:官方网站:

C++:void HoughLines(InputArray image,OutputArray lines,double rho,double theta,int threshold,double srn = 0,double stn = 0)

并且对行的输出数组参数进行了解释,它说:

lines - 行的输出向量.每条线由两元素矢量表示:rho和theta.对于垂直线,theta为0,对于水平线,则θ为2(辐射亮度).

我想知道theta的原理是什么?似乎theta是在0〜1.57的范围内(因为PI/2为1.57),但我运行代码并找出THETA可以超过1.57,并成为一些奇怪的值,如下面的图中,红线是检测到的by HoughLines,sita是参数行中的值? 在此输入图像描述.

任何人都可以告诉我从线输出的theta的规律性是什么?

非常感谢 !

c++ opencv lines hough-transform

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

如何在openCV python中使用HoughLines变换精确检测线条?

我是新手在两个pythonopencv,我在检测以下图像,其具有放置在地面黑线带中的行面临的一个问题:

在此输入图像描述

我使用了以下代码:

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
print img.shape[1]
print img.shape
minLineLength = img.shape[1]-1
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
Run Code Online (Sandbox Code Playgroud)

但是它无法准确地检测到线条,只能在底部的第一个黑色条带上绘制一条绿线,甚至不覆盖整条线条,
另外,
请建议一种获取y每条线路的坐标的方法.

python numpy hough-transform opencv3.0

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

绘制Hough变换MATLAB

我试图用hough变换hough(edge_detected_image).然后我使用以下命令:

imshow(h,[],'XData',theta,'YData',rho,'InitialMagnification','fit');
 axis on
 axis normal
 hold on
Run Code Online (Sandbox Code Playgroud)

但我得到的情节是:这个

虽然我需要类似的东西 这个

怎么能实现这一目标?有任何设置要做吗?

matlab image-processing hough-transform

3
推荐指数
1
解决办法
100
查看次数