Нарисовать самую длинную линию в контурах OPENCV

Я использую OpenCV и Python. Я пытаюсь провести самую длинную линию внутри контуров.

У меня есть контур с именем cnt . Изображение двоичное, внутри контуров белый, а внешний – черный. Я хотел бы нарисовать длинную линию внутри белых контуров. Я нашел, как рисовать линии, используя cv2.lines но я не нашел, как рисовать самый длинный. У тебя есть идеи?

 img_copy = cv2.dilate(copy.deepcopy(img), np.ones((2,2),np.uint8),iterations = 2) contours, hierarchy = cv2.findContours(copy.deepcopy(img_copy),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) areas = [cv2.contourArea(c) for c in contours] max_index = np.argmax(areas) cnt = contours[max_index] 

  • Получить имя объекта для определенного объекта из namedtuple
  • Django NoReverseMatch
  • Как написать несколько условий if-statement в структуре робота
  • Python: как присоединиться к записям в наборе в одну строку?
  • Преобразование среднего значения значений списка Python в другой список
  • Как установить ограничение памяти для потока или процесса в python?
  • Как преобразовать заданный порядковый номер (из Excel) в дату
  • AttributeError: объект 'tuple' не имеет атрибута
  • One Solution collect form web for “Нарисовать самую длинную линию в контурах OPENCV”

    Приведенный ниже метод, использующий для рисования числа строк из изображения и получения степени максимального значения, попробуйте это. его рабочий штраф

      Mat Compute_skewAngle (Mat& src,Mat& src_gray,int drawLine) { int thresh = 100; RNG rng(12345); // 1. Load Gray Scae Image // 2. Get Size of Image cv::Size size = src_gray.size(); // 3. blur the Grayscale image cv::blur(src_gray, src_gray, cv::Size(3,3) ); cv::Mat threshold_output; std::vector<std::vector<cv::Point> > contours; std::vector<Vec4i> hierarchy; // 4. Detect edges using Threshold / Canny edge Detector //cv::threshold( src_gray, threshold_output, thresh, 255, THRESH_BINARY ); Mat dst, cdst; cv::Canny(src_gray, dst, thresh, 200, 3); // 5. Gray Image to BGR cvtColor(dst, cdst, CV_GRAY2BGR); #if 0 vector<Vec2f> lines; HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 ); for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; 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( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA); } #else vector<Vec4i> lines; double angle = 0.; int countNegative = 0; int countPositive =0; HoughLinesP(dst, lines, 1, CV_PI/180, 100, 10, 100); NSMutableDictionary *angleCountDict = [[NSMutableDictionary alloc] init]; for( size_t i = 0; i < lines.size(); i++ ) { if(drawLine == 1) { // draw line while pass flag value 1 Vec4i l = lines[i]; line( cdst, cv::Point(l[0], l[1]), cv::Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA); } double delta_y = lines[i][3] - lines[i][1]; double delta_x = lines[i][2] - lines[i][0]; double currentAngle =atan2(delta_y,delta_x); int angleAsDeg = abs(currentAngle * 180 / CV_PI); NSString *_retValue = [angleCountDict objectForKey:[NSString stringWithFormat:@"%d", angleAsDeg]]; int angleCount = [_retValue intValue]; [angleCountDict setObject:[NSNumber numberWithInt:angleCount + 1] forKey:[NSString stringWithFormat:@"%d", angleAsDeg]]; double slope = delta_y / delta_x ; // find the slope to detect the angle " - " or " + " if(slope < 0) countNegative ++; else countPositive ++; } #endif // sort the dictionary to get the largest value of degree count NSArray *blockSortedKeys = [angleCountDict keysSortedByValueUsingComparator: ^(id obj1, id obj2) { return [obj2 compare:obj1]; }]; NSString *degreeVal; if([blockSortedKeys count] > 0) degreeVal = [blockSortedKeys objectAtIndex:0]; angle = [degreeVal doubleValue]; if(countNegative > countPositive) { angle = - angle; } Mat outPut; outPut = rotateMatImage(src,angle,cdst); return outPut; 

    }

    Interesting Posts

    Сохранение модели Django из проекта Scrapy

    Почему django использует запятую как десятичный разделитель

    nump / scipy аналог mminsearch Matlab

    Как исправить переопределение str?

    Как использовать глобальную в колбе g.user

    Как удалить строки Pandas DataFrame, значение которых в определенных столбцах составляет NaN

    Удаление определенных элементов из кеша Django?

    дополнительный пустой элемент при удалении элемента из кортежа

    Нажатие на существующее приложение AWS Elastic Beanstalk из командной строки

    Использование Suds для SOAP в python, suds.client.Client объекты потокобезопасны?

    Получение стандартных ошибок для установленных параметров с использованием метода optimize.leastsq в python

    Django: Как получить корневой путь сайта в шаблоне?

    Используя простой генератор питона как совместную процедуру в обработчике асинхронного Tornado?

    Как передать поток openCV на HTML-страницу?

    Python – Python 3.1 не может обрабатывать кодированные файлы UTF-16?

    Python - лучший язык программирования в мире.