я реализовал Houghlinesp в OpenCV с помощью VS 15. Код в following-Как узнать, какие координаты принадлежат к строкам после 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;
}
Как я могу знать, какие координаты, какие строки? Можно ли это сделать? Или, может быть, я могу сгруппировать более близкие линии, чтобы дать мне всего три лезвия, их фрагменты кода, которые я могу использовать для этого?
Кроме того, я не понимаю углы, которые были рассчитаны. [Я хочу углы относительно горизонтальной линии]. Может ли кто-нибудь помочь мне понять это?
Есть ли способ, что я могу ограничить найденные строки в только линии лопастных (без ограничения вертикальных линий найдено, потому что в другом случае лезвие может также находиться в вертикальном положении)
Любая помощь оценили.
Для ограничения линий на лопатки только, вам придется удалить полюс в предварительной обработке. Это помогает, если это другой цвет. –
Для маркировки линий вы можете добавить метки к своим точкам в l-векторе http://stackoverflow.com/questions/21256914/add-text-labels-in-opencv-image –
Углы вычисляются в соответствии с матрицей, 0,0 начинается в верхнем левом углу. -160 углов - углы линий дальнего правого клинка. –