how to get desired line in the frame or measure the distance between two line?
hello,
I an using this code for hough line
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
Mat frame;
int main()
{
Mat src = imread("building.jpg", 0);
Mat dst, cdst;
Canny(src, dst, 50, 200, 3);
cvtColor(dst, cdst, CV_GRAY2BGR);
vector<Vec2f> lines;
// detect lines
HoughLines(dst, lines, 1, CV_PI/180, 150, 0, 0 );
// draw lines
for( size_t i = 0; i < lines.size(); i++ )
{
float rho = lines[i][0], theta = lines[i][1];
if( theta>CV_PI/180*170 || theta<CV_PI/180*10)
{
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
line( src, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
}
}
imshow("source", src;
imshow("detected lines", cdst);
waitKey();
return 0;
}
I want line aroung the tube only and other i don't want. the width of tube is aroung 46 pixel, from the frame. is there any suggestions how to detect the desired line.
Thank you very much in advance.
Why you are using hough ? If you know that tubes are vertical you could analyse your frame with 4 or 5 horiz scan line to find the edge of your tube than interpolate the point.
thank you for comment. in my case i am trying to detect the tube , but i have no idea about how to do it, so i tried with hough line. can you please give me detail how to go forward.
Skip hough line which is a giant overkill, go for a vertical Sobel filter, than interconnect points like @pklab says!