3 #include <opencv2/core/core.hpp>
4 #include <opencv2/highgui/highgui.hpp>
5 #include <opencv2/imgproc/imgproc.hpp>
11 int main(
int argc,
char** argv)
13 ros::init(argc, argv,
"image_test");
15 Mat input = imread(
"/home/asus/workingcopies/lar4/src/perception/pedestrians/multimodal_pedestrian_detect/images/outside_test/frame0002.jpg", CV_LOAD_IMAGE_COLOR);
20 inRange(input, Scalar(150, 150, 150), Scalar(255,255,255), redOnly);
23 vector<std::vector<cv::Point> > contours;
24 Mat contourOutput = redOnly.clone();
25 findContours( contourOutput, contours, CV_RETR_TREE, CV_CHAIN_APPROX_NONE );
27 vector<vector<Point> > contours_poly( contours.size() );
29 Mat drawing = Mat::zeros( redOnly.size(), CV_8UC3 );
31 int max_size_triangle=0;
32 for(
size_t i = 0; i < contours.size(); i++)
34 approxPolyDP(Mat(contours[i]), contours_poly[i], 0.01*arcLength(Mat(contours[i]),
true),
true);
39 if (contours_poly[i].size() == 4)
41 cout <<
"arclength: " << arcLength(Mat(contours[i]),
true) << endl;
42 cout <<
"size_poly: " << contours_poly[i].size() << endl;
43 cout <<
"size: " << contours[i].size() << endl;
46 if( arcLength(Mat(contours[i]),
true) > arcLength(Mat(contours[max_size_triangle]),
true))
48 max_size_triangle = i;
53 double max_width = contours_poly[max_size_triangle][3].x - contours_poly[max_size_triangle][0].x;
54 double min_width = contours_poly[max_size_triangle][2].x - contours_poly[max_size_triangle][1].x;
55 double height = contours_poly[max_size_triangle][1].y - contours_poly[max_size_triangle][0].y;
57 cout <<
"triangle pixel size: " << max_size_triangle <<
" " << contours_poly[max_size_triangle] <<
" " << arcLength(Mat(contours[max_size_triangle]),
true) << endl
58 <<
"max width: " << max_width << endl
59 <<
"min width: " << min_width << endl
60 <<
"height: " << height << endl;
62 drawContours(drawing, contours_poly, max_size_triangle, Scalar(255, 255, 255),CV_FILLED,8);
65 double object_width_percent_laser_given = 1 - (0.02);
67 int laser_line_int = object_width_percent_laser_given * height;
68 double laser_line = object_width_percent_laser_given * height;
72 if(laser_line - laser_line_int >=0.5 )
75 int laser_line_position = contours_poly[max_size_triangle][0].y + laser_line_int;
78 Mat grayscaleMat(drawing.size(), CV_8U);
81 cvtColor(drawing, grayscaleMat, CV_BGR2GRAY);
87 for(
int col=contours_poly[max_size_triangle][0].x; col<contours_poly[max_size_triangle][3].x; col++)
88 if(grayscaleMat.at<uchar>(laser_line_position,col) != 0)
91 left_point.y=laser_line_position;
96 right_point.y=laser_line_position;
101 cout <<
"laser_line, double: " << laser_line <<
" int: " << laser_line_int << endl;
102 cout <<
"points, left_point: " << left_point <<
" right_point: " << right_point << endl;
104 line(input, left_point, right_point, Scalar(0, 0, 255), 1, 8,0);
106 imshow(
"input", input);
int main(int argc, char **argv)