Толщина линии в cv Canny
Учу opencv и С++. Проблема в том что на мелких изображений Canny рисует очень токую прерывистую линию, которая тем более имеет ступенчатый вид. Соответственно плохо работает метод по поиску линий cv::HoughLinesP. На крупных изображений такой проблемы нет, а вот на мелких угол наклона изображения отображается не корректно, вот код:
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
double angle = 0.;
int apertureSize = 5;
std::cout<<"width:" << image.cols << std::endl;
std::cout << "height:" << image.rows << std::endl;
image.copyTo(canny_output);
int thresh = 100;
if(canny_output.cols<100)
thresh = 40;
if (canny_output.cols > 150) {
apertureSize = 3;
}
cv::threshold(canny_output, canny_output, 165, 250, 0);
/// Detect edges using canny
Canny(canny_output, canny_output, 220, 400,3,false );
/// Find contours
findContours(canny_output, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE+2);
cv::Mat drawing;
canny_output.copyTo(drawing);
std::cout << "lines size findContur: " << hierarchy.size() << std::endl;
for (int i = 0; i < contours.size(); i++)
{
Vec4i l = hierarchy[i];
double value;
double limeL = lenghtLine(hierarchy[i][0], hierarchy[i][1], hierarchy[i][2], hierarchy[i][3]);
Scalar color = Scalar(255, 255, 255);
drawContours(canny_output, contours, i, color, 1, 16, hierarchy, 0, Point());
}
std::vector<cv::Vec4i> linesP;
cv::HoughLinesP(canny_output, linesP, 1, CV_PI/180 , 40,(canny_output.cols /2)-10, 0);
std::cout << "size line in image: " << linesP.size() << std::endl;
int nb_lines = linesP.size();
if (nb_lines == 0) {return 0;}
for (unsigned i = 0; i < nb_lines; i++)
{
//Vec4i l = linesP[i];
double value;
double limeL= lenghtLine(linesP[i][0], linesP[i][1], linesP[i][2], linesP[i][3]);
angle += value = atan2((double)linesP[i][3] - linesP[i][1], (double)linesP[i][2] - linesP[i][0]);
std::cout << "angle: " << value * 180 / CV_PI << " lenght: " << limeL << std::endl;
}
angle /= nb_lines;
std::cout << "Main angle: " << angle * 180 / CV_PI << std::endl;
Метод cv drawConturs улучшил результат,но не сильно. Размытие тоже не помогает(