如何找出哪些坐标属于HoughLinesp后的哪些线?
问题描述:
我实现Houghlinesp OpenCV中使用VS 15的代码是为以下各项如何找出哪些坐标属于HoughLinesp后的哪些线?
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <math.h>
#include <iostream>
using namespace cv;
using namespace std;
static void help()
{
cout << "\nThis program demonstrates line finding with the Hough transform.\n"
"Usage:\n"
"./houghlines <image_name>, Default is pic1.png\n" << endl;
}
int main(int argc, char** argv)
{
const char* filename = argc >= 2 ? argv[1] : "Turbine.jpg";
Mat src = imread(filename, 0);
if (src.empty())
{
help();
cout << "can not open " << filename << endl;
return -1;
}
Mat dst, cdst;
Canny(src, dst, 50, 200, 3);
cvtColor(dst, cdst, CV_GRAY2BGR);
vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI/180, 50, 110, 10);
for (size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, CV_AA);
Point p1, p2;
p1 = Point(l[0], l[1]);
p2 = Point(l[2], l[3]);
//calculate angle in radian, if you need it in degrees just do angle * 180/PI
double angle = atan2(p1.y - p2.y, p1.x - p2.x);
double angles = angle * 180/3.14159265358979323846;
cout << "line coordinates are " << l << endl;
cout << "Angles are " << angles << endl;
}
imshow("source", src);
imshow("detected lines", cdst);
waitKey();
return 0;
}
我怎样才能知道哪些坐标是哪个系的?是否有可能这样做? 或者,也许我可以将更接近的行分组给我,只需三条刀片线,我可以使用它们的代码片段?
此外,我不明白已计算的角度。 [我想要一个水平线的角度]。任何人都可以帮我理解这个吗?
有没有什么办法可以限制发现刚刚刀片行线(不限制在另一个实例刀片还可以在垂直位置,因为发现了垂直线)
任何帮助赞赏。
答
从HugeLinesP()
计算的直线给出定义直线的两点。从那里你可以计算功能f(x) = k*x + n
这是一条线的定义。 (用y代替f(x),用x代替x,得到两个有两个变量的方程组)。
cv :: Mat的坐标系以0,0开头于左上角。在通用坐标系统中,我们使用x从左到右增长,y从下到上增长,这里我们从左到右依次增长x,但是y反过来并且从上到下增长。这会影响你的角度计算。
对于你最后一个问题,我帮不了你。首先,在进行Huges变换之前,你必须以某种方式去除图像中的极点。如果您唯一感兴趣的是角度,那么您可以收集所有处于某个较小间隔的角度并计算平均角度。如果您试图在一系列图像中跟踪刀片,则可以推测一张刀片的角度在两张图片之间不会发生很大变化(这意味着相机在刀片以最快速度旋转60度之前必须至少拍摄两张图像回转)。
希望这会有所帮助
仅限于将刀片限制在刀片上,您必须在预处理时取下刀杆。如果是另一种颜色,它会有所帮助。 –
对于标记线,你可以添加标签到他们的点在l矢量http://stackoverflow.com/questions/21256914/add-text-labels-in-opencv-image –
角度计算根据矩阵,0,0开始在左上方。 -160角度是最右边刀片的直线角度。 –