- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用霍夫变换来检测圆圈。
使用我当前的代码,我可以检测到下面的代码
但我想在我检测到的圆圈内找到黑洞。然而,改变 houghcircle 方法的参数对我没有帮助。实际上它发现了不存在的圈子。
我也试过裁剪我找到的圆圈并在这个新部分上做另一个霍夫变换它也没有帮助我。
这是我的代码
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/opencv.hpp" // needs imgproc, imgcodecs & highgui
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src, circleroi;
/// Read the image
src = imread( "/Users/Rodrane/Documents/XCODE/test/mkedenemeleri/alev/delikli/gainfull.jpg", 2 );
/// Convert it to gray
// cvtColor( src, src_gray, CV_BGR2GRAY );
/// Reduce the noise so we avoid false circle detection
GaussianBlur( src, src, Size(3, 3), 2, 2 );
// adaptiveThreshold(src,src,255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,9,14);
vector<Vec3f> circles,circlessmall;
// Canny( src, src, 50 , 70, 3 );
/// Apply the Hough Transform to find the circles
HoughCircles( src, circles, CV_HOUGH_GRADIENT, 1, src.rows/8, 200, 100, 0, 0 );
/// Draw the circles detected
for( size_t i = 0; i < circles.size(); i++ )
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][4]));
int radius = cvRound(circles[i][5]);
// circle center
circle( src, center, 3, Scalar(0,255,0), -1, 8, 0 );
// circle outline
circle( src, center, radius, Scalar(0,255,0), 3, 8, 0 );
circleroi = src(Rect(center.x - radius, // ROI x-offset, left coordinate
center.y - radius, // ROI y-offset, top coordinate
2*radius, // ROI width
2*radius));
// imshow( "Hough Circle Transform Demo", circleroi );
}
resize(src, src, Size(src.cols/2, src.rows/2));
// threshold( circleroi, circleroi, 50, 255,CV_THRESH_BINARY );
// cout<<circleroi<<endl;
imshow("asd",src);
// imwrite("/Users/Rodrane/Documents/XCODE/test/mkedenemeleri/alev/cikti/deliksiz.jpg",circleroi);
waitKey(0);
return 0;
}
更新:由于 hough 在内部使用了 canny,我手动使用 canny 来查看它是否找到了圆圈。
这里有精明的结果 Canny(src,src, 100, 200,3);
谢谢
最佳答案
您正在设置 HoughCircles
参数之一 minDist = src.rows/8
,该参数相当大。 docs解释:
minDist – Minimum distance between the centers of the detected circles. If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed.
该方法无法同时返回它找到的圆和您想要的圆,因为它们具有几乎相同的中心(在 src.rows/8
内),只是大小不同.如果您将 maxRadius
设置为 30 左右的值以排除较大的圆,您是否得到所需的较小圆?
关于c++ - 使用 Hough 变换检测圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826798/
我在 MATLAB 中找到了 Hough 变换的实现,地址是 Rosetta Code ,但我无法理解它。我还想修改它以显示原始图像和重建的线条(去霍夫)。 感谢任何有助于理解它和消除霍夫的帮助。谢谢
我在Hough Line转换方面遇到麻烦。我正在尝试确定厨房中的主要线条。我最初只是使用Canny,但它会拾取比我想要的更多的噪音,并且没有拾取墙壁和天花板的交集。但是,“霍夫线”变换仅识别一条根本不
我目前在HoughCircles上使用computer-vision,但无法使其正常工作。 如何解决此错误? Error : 'Traceback (most recent call last):
我正在尝试检测斯诺克 table 上的 22 个球。我有一张图像要测试,但程序 os 检测 2 个球,以及其他地方的随机圆圈。我的代码在圆检测算法下面。有谁知道应该调整哪些参数以获得我需要的检测?谢谢
OpenCV 中的 HoughLines 或 HoughLinesP 函数是否像 HoughCircles 函数那样返回累加器顺序的行列表?我想知道行的顺序。获取线条的累加器值也非常方便,因此可以使用
我想使用OpenCV Hough Circles的实现,但是我有一个问题: 该函数返回的圈子已经通过投票排序了吗? 由于霍夫变换基于投票机制,因此我想知道此圈子是按投票顺序从最高投票到最低投票,还是随
我正在尝试对实时视频源运行霍夫线变换。首先,提要通过一个精明的边缘检测器,它可以完美地工作并输出,然后我通过霍夫线变换运行图像,它导致“windows 触发了 openCv.exe 中的断点。”如果您
我有如下图片: 我正在尝试通过 HoughCircles 函数检测圆圈。在检测之前,我对图像进行阈值处理,并通过高斯技术对其进行模糊处理。结果如下: 倒置图像更大,因为我碰巧发现,如果我不以相同的纵横
我想找到下图中的圆圈。我尝试使用 OpenCV 的 Hough circle detection但它没有给出正确的结果。 还有其他方法可以找到圈子吗? 这里是示例代码 vector circles;
我正在尝试用我的函数重新创建 MATLAB 的 hough 函数。我的代码如下 function [H,T,R] = my_hough(x,dr,dtheta) rows = size(x,1
我正在尝试使用霍夫变换来检测圆圈。 使用我当前的代码,我可以检测到下面的代码 但我想在我检测到的圆圈内找到黑洞。然而,改变 houghcircle 方法的参数对我没有帮助。实际上它发现了不存在的圈子。
霍夫变换(Hough Transform)的主要思想: 一条直线在平面直角坐标系(x-y)中可以用y=ax+b式表示,对于直线上一个确定的点(x0,y0),总符合y0-ax0=b,而它可以表
我正在尝试从网络摄像头获取视频流,并使用HoughCircles()检测其中的圈子。但是,无论何时我尝试运行代码,视频都会花费一些时间来加载图像,或者根本不会加载图像。我们将非常感谢您提供有关如何获取
我正在编写代码以从图像中裁剪收据。我正在使用“opencv4nodejs”模块在javascript中开发解决方案,但我已经习惯了Python和C++。 我见过不同的方法,例如 this ,但如果检测
我目前正在与 Hough Circles 合作。有什么方法可以自动为霍夫圆找到合适的参数吗?现在,我只是手动更改值,直到它正确绘制圆圈。 最佳答案 我认为您还应该看看 http://www.cse.y
当我运行 cv2.HoughCircles() 时出现错误 Traceback (most recent call last): File "cv.py", line 1, in imp
我使用 HoughLinesP 来识别线条。但是,我的问题是我怎么知道什么时候没有检测到线。我尝试将矢量线与 null 进行比较,但没有任何反应。准确地说,这是我的代码: for(size_t k=0
我是 opencv 的新手。我想检测图像中非常小的线条并将它们存储为线条数组。我的图像中不会有超过 10 条线(对齐标记)。我已经使用 opencv 示例教程使用 canny 和 Hough 检测线条
我正在尝试使用 OpenCV 的 Hough Circles 函数从下图中检测圆 我的代码(OpenCV 和 Python) myImage = cv2.imread("C:\\sample.jpg"
我正在尝试实现 this paper 中介绍的广义 Hough 变换在 MATLAB 中。我也试过使用 this document理解算法。我一直在研究如何计算梯度角以找到要在 R 表中使用的 Φ。
我是一名优秀的程序员,十分优秀!