2012-07-02 18 views
5

Aşağıdaki resimde OpenCV'de findcontours() işlevini kullanmaya çalışıyorum. OpenCV findcontours, her daire için 2 kontür döndürüyor

findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0));

ben bu sorguyu yapmak

: her dairenin 2 kontur görünüyor böylece contours.size() o, 18 döndürür. Daireler 1 piksel kalınlığında görebildiğiniz gibi, 2 kontür nasıl? Öyle ise, iç ve dış için bir tane mi, eğer öyleyse, bu işlevi her çember için sadece bir konturu tespit etmek için nasıl zorlayabilirim? Bir konturun piksel 1 piksel kalınlığında bağlı bir dizi olarak tanımlandığını düşündüm.

Says there are 18 contours!!

cevap

4

ben bu teyit edemez, ama bu işlev tarafından kullanılan algoritma, her fonksiyon için gradyan bilgisayar eşdeğer bir şey yapar düşünüyorum. Demek istediğin gibi, dış kenarında ve iç kenarda bir kontur bulunacaktır. Bunu doğrulamak için sen (iç kontur elimininating) çevreler beyaz ile doldurulmuş bir giriş görüntüsünü kullanmayı deneyebilirsiniz

da findContours işlev Örneğin

farklı parametrelerle test edebilirsiniz, denemek CV_RETR_EXTERNAL yerine CV_RETR_TREE kullanarak ben iç daire dış birinin içinde yuvalanmış varsayalım, bu nedenle bu zorlamak gerektiğini zaten bu anladım olabilir

+0

Fakat bu örneğe baktığımda [burada] (http://jmpelletier.com/a-simple-opencv-tutorial/), iç ve dış kısımları ayrı ayrı saymıyor gibi görünüyor. Ama örnekte bulcontourların C versiyonu var. Eski ve yeni uygulamalar arasında bir fark var mı? –

+0

no, C ve C++ sürümü arasında son sonucu etkileyecek hiçbir fark olmamalıdır. Aslında hatırladığım şeyden biri, diğeri için sadece bir sarıcı. Ancak, bu linkten görüntülere baktığımda, söylediklerinizin tam tersini görüyorum. Her dairenin hem iç hem de dış çevresini tespit ediyor gibi gözüküyor, bu da burada gösterilen görüntü üzerinde daha da mantıklı olan – Naps62

+1

Gerçekten de CV_RETR_EXTERNAL bayrağı sizin için düzeltmelidir. Tam bir bayrak listesi için buraya bakın: http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#void findContours (InputOutputArray görüntüsü, OutputArrayOfArrays konturları, OutputArray hiyerarşisi, int modu, int yöntemi, Point ofset) –

0

sadece dış olanları iade ama ... için

find, yalnızca beyaz nesneler ile ilgili endişeleri ifade eder ve böylece çukur çemberlerin her birini bir bant olarak tanır ve böylece iki kontur üretir.

Dolu daireler ile başka bir görüntü oluşturmak ve bu görüntü için findContoours uygulamak için en iyi yoldur. Ne istediğini sana verecek.

İlgili konular