У меня есть изображение, на котором я бегу дилатацию, и работает отлично, теперь я хочу, чтобы обнаружить две линии Дика на него:обнаруживая 2 линии OpenCV
и при запуске на нем часть код:
cv::Canny(dilationResult,canny,50,200,3);
cv::cvtColor(dilationResult,dilationResult,CV_BGR2GRAY);
cv::HoughLines(canny,lines,30,CV_PI/180,500,0);
cv::cvtColor(mask,mask,CV_GRAY2BGR);
if(lines.size()!=0){
std::cout << " line Size " << lines.size()<< std::endl;
for(size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][2];
cv::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));
angle = atan2f((pt2.y-pt1.y),(pt2.x-pt1.x))*180.0/CV_PI;
std::cout << "angle " << angle<< std::endl;
line(mask, pt1, pt2, cv::Scalar(0,0,255), 3, CV_AA);
}
}
cv::imshow("mask " ,mask);
вот результат:
, что я хотел бы получить что-то вроде этого:
получает только 2 линии, которые имеют одинаковую ширину, и, кстати, я не хочу использовать findcontour
функцию
любой идеи как это можно сделать!
вы можете попробовать фильтр Собеля на первом изображении (возможно, после медианного размытия), давая края на границе между белым и черным. Затем снова попробуйте линии hough! – Micka
Вы рисуете результат на изображении «маска», которое нигде не определено. Пожалуйста, покажите результат функции canny, потому что вы запускаете hough на этом изображении. – littleimp
, поскольку я сказал, что это часть кода, я получил много шума на этом снимке – Engine