标签: hough-transform

MATLAB中的Hough变换

有谁知道如何使用霍夫变换来检测二进制图像中最强的线:

A = zeros(7,7);
A([6 10 18 24 36 38 41]) = 1;
Run Code Online (Sandbox Code Playgroud)

使用(rho; theta)格式,θ为-45°至90°的45°.如何在MATLAB中显示累加器数组.

有任何帮助或提示吗?

谢谢!

matlab image-processing hough-transform

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

微调Hough Line功能参数OpenCV

我一直试图在广场周围找到4条线,以便我可以获得正方形的顶点.由于准确性,我采用这种方法而不是直接使用Harris或轮廓方法找到角点.在opencv中使用内置函数中的houghlines,我无法获得全长行来获得交叉点,而且我也得到了太多不相关的行.我想知道参数是否可以微调以获得我的要求?如果是,我该如何解决?我的问题与此处的问题完全相同.但是,即使在更改这些参数后,我也无法获得这些线条.我已将原始图像与代码和输出相关联:

原始图片:

原始图像

码:

#include <Windows.h>
#include "opencv2\highgui.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/videoio/videoio.hpp"

using namespace cv;
using namespace std;

int main(int argc, const char** argv)
{

    Mat image,src;
    image = imread("c:/pics/output2_1.bmp");
    src = image.clone();
    cvtColor(image, image, CV_BGR2GRAY);
    threshold(image, image, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY_INV);

    namedWindow("thresh", WINDOW_NORMAL);
    resizeWindow("thresh", 600, 400);

    imshow("thresh", image);

    cv::Mat edges;

    cv::Canny(image, edges, 0, 255);

    vector<Vec2f> lines;
    HoughLines(edges, lines, 1, CV_PI / 180, 100, 0, 0);
    for (size_t i = 0; i < lines.size(); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv hough-transform

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

使用OpenCV检测银色和反射球

我试图通过OpenCV检测反映环境的银球: 一个银球 有了黑球,我通过检测圆圈成功地做到了:

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

gray = cv2.GaussianBlur(gray,(5,5),0);
gray = cv2.medianBlur(gray,5)

gray = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,3.5)

kernel = np.ones((3,3),np.uint8)

gray = cv2.erode(gray,kernel,iterations = 1)

gray = cv2.dilate(gray,kernel,iterations = 1)

circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 1, 260, \
                    param1=30, param2=65, minRadius=0, maxRadius=0)
Run Code Online (Sandbox Code Playgroud)

但是当使用带银球的程序时,我们没有得到任何结果.

当观察程序计算的边缘时,球的边缘非常清晰.但是守则并没有承认任何球.

银球的边缘

如何提高银球的检测率?我想到了两种方法: - 改善边缘计算 - 使圆检测接受边缘不清晰的图像这可能吗?这样做的最佳方法是什么?

非常感谢帮助.

python opencv hough-transform

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

检测圆圈并测量像素

在此输入图像描述

在此图像中,我需要检测车辆轮辋并通过图像处理测量轮辋的像素长度.我想我应该遵循循环Hough变换的圆圈.你能告诉我哪些步骤可以获得轮辋的宽度?ex(灰度 - >边缘检测,或对此的任何其他评论)

image-processing edge-detection grayscale hough-transform threshold

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

Opencv - cvHoughLines2

我正在阅读Learning openCV,我cvHoughLines2在本书中遇到了描述.但我无法理解一件事.

我读到Hough变换,我想我的理解,这样的参数rho,并theta会按位令人费解给我.当我们rho=xcos(theta)+ycos(theta)在确定某些离散值时theta,我们有等式,rho应该自动知道值.

在本书中,据说opencv创建了rhox thetaaccumlator数组.

opencv是否只是将角度离散为倍数360/theta?但rho参数如何适合?rho离散化的价值如何?

opencv hough-transform

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

突出显示由霍夫变换找到的线条 - OPENCV

在Matlab中,通过组合霍夫变换,houghpeaks和houghlines,可以在原始图像中显示检测到的线条.

这可以在下面的图像中显示(通过使用来自Matlab的houghlines帮助的示例代码生成).检测到绿线.蓝色的是最长的一个:

Mathoworks的示例代码输出

我在我生成的简单合成图像上运行了cv :: HoughLines(几个正方形等).图像附在此处:

我的样本图片

相关代码部分是:

cv::vector<cv::Vec2f> lines;
cv::HoughLines(I_BW, lines, 1, CV_PI/180,200);
cv::Mat linesMat ( lines, true );
Run Code Online (Sandbox Code Playgroud)

查看linesMat矩阵(我将其转换为此形式以便我可以使用图像监视来查看数据),同时运行for循环以在边缘图像上添加红线我看到rho和theta按最长的顺序排序图像中的线条.

我的输出是:

显示8条最强的线

线条是图像的整个宽度(或高度).如何在Matlab示例中显示实际的行?我可以从rho + theta回到x和y,然后我必须以某种方式将它们链接到检测到的边缘等等 - 也许有一种简单的方法可以做到这一点,我错过了?

谢谢!

matlab opencv hough-transform

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

OpenCV:如何检测特定颜色的线条?

我正在开发一个小型OpenCV项目,用于从手机摄像头中检测某种颜色的线条.

总之希望:

  1. 将输入图像转换为特定颜色的图像(例如,来自特定上下范围的红色)
  2. 将Hough线变换应用于生成的图像,以便仅检测该特定颜色的线条
  3. 在原始图像上叠加检测到的线条

这些是我想要使用的功能,但不能确定如何填补缺失的位.

这是在处理来自CvVideoCamera实例的图像时从智能手机应用程序调用的processImage函数

- (void)processImage:(Mat&)image;
{
cv::Mat orig_image = image.clone();

cv::Mat red_image = ?? 

// Apply houghes transformation to detect lines between a minimum length and a maximum length (I was thinking of using the CV_HOUGH_PROBABILISTIC method..)
// Comment.. see below..
Run Code Online (Sandbox Code Playgroud)

我无法理解这里文档,因为C++方法签名没有方法字段

vector<Vec2f> lines;
Run Code Online (Sandbox Code Playgroud)

从官方文档:

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

HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 ); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv feature-extraction hough-transform color-detection

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

理解霍夫变换

我试图理解MATLAB的Hough变换代码.

在此输入图像描述

在这张照片中我清楚了一些项目,

  1. binary_image是单色版input_image.
  2. hough_lines是包含图像中检测到的线条的矢量.我看到,已检测到四条线.
  3. T包含(?, ?)图像空间中的thetas .
  4. R包含(?, ?)图像空间中的rhos .

我有以下问题,

  1. 为什么在应用Hough变换之前旋转图像?
  2. 这些条目H代表什么?
  3. 为什么H(霍夫矩阵)大小为45x180?这个尺寸来自哪里?
  4. 为什么T尺寸为1x180?这个尺寸来自哪里?
  5. 为什么R尺寸为1x45?这个尺寸来自哪里?
  6. 这些条目P代表什么?他们(x, y)还是(?, ?)
    29 162
    29 165
    28 170
    21  5
    29 158
    
    Run Code Online (Sandbox Code Playgroud)
  7. 为什么值5传入houghpeaks()
  8. 背后的逻辑是ceil(0.3*max(H(:)))什么?

相关的源代码

%   Read image into workspace.
input_image  = imread('Untitled.bmp');

%Rotate the image.
rotated_image = imrotate(input_image,33,'crop');

% convert rgb to grascale
rotated_image …
Run Code Online (Sandbox Code Playgroud)

matlab image image-processing computer-vision hough-transform

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

如何找到图像中物体的中心和角度?

我正在使用 python 和 OpenCV。我试图找到电池的中心和角度:

随机角度的电池图像: 在此处输入图片说明

比我有的代码是这样的:

import cv2
import numpy as np


img = cv2.imread('image/baterias2.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img2 = cv2.imread('image/baterias4.png',0)


minLineLength = 300
maxLineGap = 5

edges = cv2.Canny(img2,50,200)
cv2.imshow('Canny',edges)
lines = cv2.HoughLinesP(edges,1,np.pi/180,80,minLineLength,maxLineGap)
print lines
salida = np.zeros((img.shape[0],img.shape[1]))
for x in range(0, len(lines)):
    for x1,y1,x2,y2 in lines[x]:
        cv2.line(salida,(x1,y1),(x2,y2),(125,125,125),0)#  rgb


cv2.imshow('final',salida)
cv2.imwrite('result/hough.jpg',img)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

有什么想法可以解决吗?

python opencv image-processing hough-transform

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

使用Hough变换OpenCV Android进行矩形文档检测

我正在尝试使用opencv 4 android sdk检测矩形文档。首先我试图通过找到轮廓来检测它,但是它不能用于多彩色文档。您可以检查此链接以获得更好的主意: 使用OpenCV4Android检测多彩色文档

我进行了很多研究,发现可以使用houghline变换来完成它,因此我遵循以下方法来检测文档:

原始图像-> cvtColor->高斯模糊滤波器->对其进行扩张以锐化边缘->应用分水岭图像分割算法->具有动态otsu阈值的canny边缘检测->然后应用霍夫线变换

我为霍夫线变换所做的是:

Imgproc.HoughLinesP(watershedMat, lines, 1, Math.PI / 180, 50, 100, 50);

    List<Line> horizontals = new ArrayList<>();
    List<Line> verticals = new ArrayList<>();
    for (int x = 0; x < lines.rows(); x++)
    {
        double[] vec = lines.get(x, 0);
        double x1 = vec[0],
                y1 = vec[1],
                x2 = vec[2],
                y2 = vec[3];
        Point start = new Point(x1, y1);
        Point end = new Point(x2, y2);
        Line line = new Line(start, end);
        if (Math.abs(x1 - x2) > Math.abs(y1-y2)) …
Run Code Online (Sandbox Code Playgroud)

opencv edge-detection hough-transform opencv4android houghlinesp

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