- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用适用于 Android 的 OpenCV 3.0。我有一张图像,我想在其中检测圆形表盘内手的角度。为此,我正在研究 HoughLinesP
来检测手。这是代码。
Mat imgSource = new Mat(), imgCirclesOut = new Mat(),imgLinesOut=new Mat();
//grey opencv
Imgproc.cvtColor(Image, imgSource, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur( imgSource, imgSource, new Size(9, 9), 2, 2 );
int threshold = 0;
int minLineSize = 0;
int lineGap = 0;
Imgproc.HoughLinesP(imgSource, imgLinesOut, 1, Math.PI/180, threshold, minLineSize, lineGap);
for( int j = 0; i < imgLinesOut.cols(); i++ )
{
double[] vec=imgLinesOut.get(0,j);
Point pt1, pt2;
pt1=new Point(vec[0],vec[1]);
pt2=new Point(vec[2],vec[3]);
Imgproc.line( Image, pt1, pt2, new Scalar(0,0,255), 3, Core.LINE_AA,0);
}
我需要的是手在这些圆圈中的角度。非常感谢有关此问题的任何帮助。提前致谢
编辑我已经用这个更新了我的代码
Mat imgSource = new Mat(), imgCirclesOut = new Mat(),imgLinesOut=new Mat();
Imgproc.GaussianBlur( Image, imgSource, new Size(5, 5), 2, 2 );
int threshold = 20;
int minLineSize = 0;
int lineGap = 10;
Imgproc.Canny(imgSource, imgSource, 70, 100);
Imgproc.HoughLinesP(imgSource, imgLinesOut, 1, Math.PI/180, threshold, minLineSize, lineGap);
for( int j = 0; j < imgLinesOut.cols(); j++ )
{
double[] vec=imgLinesOut.get(0,j);
Point pt1, pt2;
pt1=new Point(vec[0],vec[1]);
pt2=new Point(vec[2],vec[3]);
Imgproc.line( imgSource, pt1, pt2, new Scalar(0,0,255), 3, Core.LINE_AA,0);
}
正如@Micka 所建议的,不需要灰化图像(我删除了cvtcolor
)。我还将 GuassianBlur
Size 的值减小到 5
。我也在图像上为边缘添加了 Canny。
生成的模糊图像是
最佳答案
在如此小的图像中检测线可能是个问题,因为您必须很少的点才能正确填充 Hough 累加器。
我建议使用不同的方法:
下面是这个想法的简单实现。代码是用 C++ 编写的,但您可以轻松移植到 Java,或者至少用作引用。
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
Mat1b img = imread("path_to_image", IMREAD_GRAYSCALE);
Mat3b res;
cvtColor(img, res, COLOR_GRAY2BGR);
// Find dials
vector<Vec3f> circles;
HoughCircles(img, circles, CV_HOUGH_GRADIENT, 1, img.cols/10, 400, 40);
// For each dial
for (int i = 0; i < circles.size(); ++i)
{
// Segment the dial
Mat1b dial(img.size(), uchar(255));
Mat1b mask(img.size(), uchar(0));
circle(mask, Point(circles[i][0], circles[i][1]), circles[i][2], Scalar(255), CV_FILLED);
img.copyTo(dial, mask);
// Apply threshold and open
Mat1b bin;
threshold(dial, bin, 127, 255, THRESH_BINARY_INV);
Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5,5));
morphologyEx(bin, bin, MORPH_OPEN, kernel);
// Get min area rect
vector<Point> points;
findNonZero(bin, points);
RotatedRect r = minAreaRect(points);
// Draw min area rect
Point2f pts[4];
r.points(pts);
for (int j = 0; j < 4; ++j) {
line(res, pts[j], pts[(j + 1) % 4], Scalar(0, 255, 0), 1);
}
}
imshow("Result", res);
waitKey();
return 0;
}
从这张图片开始:
我在这里找到手:
关于java - HoughLinesP 不检测线条 OpenCV android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648041/
我正在尝试使用 OpenCV 进行一些图像处理。诚然,我是这个东西的菜鸟,但我觉得我的大脑有点绕着它。我使用蒙版来检测图像的较亮区域,然后运行精明检测器,最后运行 HoughLinesP 检测。代码如
我是Python和OpenCV的新手。我正在尝试使用HoughLinesP函数从互联网上的代码检测单行,检测到3-4行。我尝试使用maxLineGap变量,但没有帮助。 输入图片: 输出图像: imp
我正在使用 HoughLinesP opencv 函数进行边缘检测。我想使用轨迹栏来估计此函数参数的良好值。我有以下代码: def compute_edgelets(image): gray =
当在 OpenCV 中使用 HoughLinesP 函数时,是否可以对单独的线条进行分析(即可以“标记”帧中检测到的所有线条以供将来引用)。 我通过调整 canny 边缘检测器将检测到的线数减少到尽可
我正在开发一个使用 OMR(光学标记识别)来读取气泡表的应用程序,我正在使用 OpenCV API,但我在使用 HoughLinesP 时遇到了一些问题,当我使用它时会返回一个空图像给我。我使用And
我正在尝试对图像应用概率霍夫变换,但出现此编译器错误: invalid initialization of reference of type ‘cv::InputArray {aka const c
我尝试使用 OpenCV 和 C++ 从输入视频中检测街道的线条。我正在使用 HoughLinesP 并且我只想检测分隔街道的线,例如水平线或垂直线。 使用 HoughLinesP(dst, line
我用VS 15在OpenCV中实现了Houghlinesp,代码如下- #include "stdafx.h" #include "opencv2/highgui/highgui.hpp" #incl
考虑图像中的三个点 A、B、C。 下面是它们在尺寸为 300x300 的图像中的坐标。 我正在尝试使用以下 HoughLinesP 代码检测并绘制一条连接这三个点的线。 import cv2 impo
我有一个对象,我想定义它的精确中心。使用 OpenCV,我使用 Canny 检测边缘,然后执行 HoughLinesP 检测线:see this . 我使用 Hough 变换是因为对象不是完全矩形的,
我的任务是找到直线(startX、startY、endX、endY)和矩形(4 条直线)的坐标。这是输入文件: 我使用下一个代码: img = cv.imread(image_src) gray =
我很难在 Python 中使用 HoughLinesP 和 OpenCV 在此图像中找到棋盘上的线条。 为了理解HoughLinesP的参数,我想出了以下代码: import numpy as np
我正在尝试制作一个简单的应用程序来使用 OpenCV 检测线路 我的代码基于 opencv 示例代码 我只编辑了OnCameraFrame部分 这是我所拥有的: public Mat onCamera
我正在使用cv2.HoughLinesP(),它给了我它检测到的行。这些线在找到物体的角度时大多是准确的。然后,我想根据这些线旋转原始图像。 我的图片: 我的代码: import cv2 as cv
我目前正在研究计算机视觉并尝试使用 Hough-Transform 来寻找一些线条。它自身的操作正在运行,但即使是最小的示例代码也会产生释放错误。 #include #include #inclu
我在这学习link . 这是原图: 我的测试代码: import cv2 import numpy as np img = cv2.imread( 'E:/image/sudoku.png' ) gr
我正在使用适用于 Android 的 OpenCV 3.0。我有一张图像,我想在其中检测圆形表盘内手的角度。为此,我正在研究 HoughLinesP 来检测手。这是代码。 Mat imgSource
我正在尝试获得他们在 this 中获得的相同结果HoughLinesP 过滤器教程。我像这样拍摄了相同的图像和相同的阈值: import cv2 from line import Line impor
我正在尝试使用 OpenCV 和 Python 测量玻璃 channel 中的水位。我决定在选定的 ROI 中使用 HaughLines 并找到所述线条的中点,这样我就可以计算出我想要的线条之间的差异
它写在文档中: lines – Output vector of lines. Each line is represented by a 4-element vector (x_1, y_1, x_
我是一名优秀的程序员,十分优秀!