2017-03-20 3 views
0

Ich muss Perimeter der Bounding Box eines Bildes in OpenCV mit C++ finden. Wenn double perimeter = arcLength(rois[wp],true); der folgende Fehler unter Verwendung erzeugt:Umfang der Bounding Box eines Bildes

Assertion failed (count >= 0 && (depth == CV_32F || depth == CV_32S)) in arcLength, 
file /home/vidushi/Desktop/OpenCV/modules/imgproc/src/shapedescr.cpp, 
line 285 terminate called after throwing an instance of 'cv::Exception' 
what(): /home/vidushi/Desktop/OpenCV/modules/imgproc/src/shapedescr.cpp:285: 
error: (-215) count >= 0 && (depth == CV_32F || depth == CV_32S) in function arcLength 

Kann jemand erklären, was das Problem sein könnte?

+0

Um die Antwort unten zu vervollständigen, wie erklären Sie 'Rois'? – cbuchart

+0

Warum berechnen Sie nicht den Umfang einfach als: '2 * (rect.width + rect.height);) – Miki

+0

jawohl @Miki Ich habe Umfang wie diese nur berechnet – coder

Antwort

1

Grundsätzlich wird das Format rois[wp] von der arcLength Funktion nicht akzeptiert. Es muss 2D sein und eine CV_32S oder CV_32F Tiefe haben. So etwas wie cv::Mat valid_roi(n, 2, CV_32F); (passen Sie sich Ihrem Problem an).

+0

Rois wird als Vektor Rois ;. Rois ist im Grunde verbundene Bildkomponente. Wenn also 2 zusammenhängende Komponenten in einem Bildvektor enthalten sind, so enthalten sie 2 Matrizen.und rois ist ein Graustufenbild, das nach dem Durchführen einer Gauß'schen Unschärfe, morphologischen, otsu-Binarisierungsoperation erhalten wird. Mein Ziel ist die Erkennung von Tabellen in einem Bild. – coder

+0

Richtig, es muss Graustufen sein, um mit dem Algorithmus zu arbeiten. – cbuchart

+0

['arcLength'] (http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#double%20arcLength (InputArray% 20curve,% 20bool% 20closed)) benötigt eine Liste von 2D-Punkten, Wenn also die Eingabe eine Matrix ist, muss sie wie im obigen Beispiel initialisiert werden. Sie können 'CV_32S' verwenden, wenn Ihre Komponenten Ganzzahlen sind. – cbuchart

Verwandte Themen