Ben OpenCV docs biraz kayboldum, cvFindContours tarafından döndürülen CvSeq'i bir diziye kaydetmek istiyorum, anladığım kadarıyla bir CvContour s sq döndürecek ama ne olduğunu bulamadım içeriyor? daha sonra bunu hangi bölümlere kaydetmeliyim ki daha sonra bunu yineleyebilirim ve cvBoundingRect çağrısı diyebilirimBir diziye CvSeq kaydet
cevap
CvContour, CvSeq ile aynı alanlara sahip bir yapıdır. hangi bir CvRect rect (bakınız include/opencv/cxtypes.h). Yani gerçekten bir CvSeq'in ne olduğuna bağlı.
OpenCV kaynakları ile birlikte gelen opencv.pdf adlı bir dosya var ve p. contours
cvFindContours
çağrıldıktan sonra ilk kontur işaret edilecektir
cvFindContours(img, storage, &contours, sizeof(CvContour), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
:
#define CV_SEQUENCE\_FIELDS()
int flags; /* micsellaneous flags */ \
int header_size; /* size of sequence header */ \
struct CvSeq* h_prev; /* previous sequence */ \
struct CvSeq* h_next; /* next sequence */ \
struct CvSeq* v_prev; /* 2nd previous sequence */ \
struct CvSeq* v_next; /* 2nd next sequence */ \
int total; /* total number of elements */ \
int elem_size;/* size of sequence element in bytes */ \
char* block_max;/* maximal bound of the last block */ \
char* ptr; /* current write pointer */ \
int delta_elems; /* how many elements allocated when the sequence grows
(sequence granularity) */ \
CvMemStorage* storage; /* where the seq is stored */ \
CvSeqBlock* free_blocks; /* free blocks list */ \
CvSeqBlock* first; /* pointer to the first sequence block */
typedef struct CvSeq
{
CV_SEQUENCE_FIELDS()
} CvSeq;
Diyelim ki böyle cvFindContours diyoruz diyelim: 138 (OpenCV 2.1 için) aşağıdaki gibi CvSeq tanımlandığını söylüyor . Eğer sınırlayan dikdörtgeni almak istiyorsanız, onu cvBoundingRect
'a aktarın. Sıradaki sonraki kontura contours->h_next
üzerinden erişilebilir. Kontur ağaçları durumunda, yani bir kontur görüntüde başka bir konturun içinde olabildiğinde, contours->v_next
aracılığıyla mevcut konturun ilk iç konturuna erişebilirsiniz. Varsa, sonraki iç kontur contours->v_next->h_next
ve benzeri olacaktır.
Diziyi bir diziye dönüştürmek isterseniz cvCvtSeqToArray
'u kullanabilirsiniz.
Ayrıca, kullanımı daha güzel görünen OpenCV 2.0'dan başlayarak C++ arayüzünü de kullanabilirsiniz. Örneğin, CvSeq** contours
parametresi cvFindContours
için vector<vector<Point> >& contours
olur.
- 1. diziye
- 2. diziye
- 3. Özel Kaydet İletişim Öznitelikleri Kaydet
- 4. Bir diziye benzeyen bir dizgiyi gerçek diziye dönüştürme
- 5. Bir diziye (hızlı)
- 6. Yinelenen Bir Diziye Ekleme
- 7. , belirli bir yerde bir diziye
- 8. Kaydet, ExpressJS
- 9. Bir diziye ikili dosya okuma
- 10. Regex.Matches'i bir diziye nasıl yerleştirebilirim?
- 11. Diziyi başka bir diziye ekle
- 12. jQuery - bir diziye eleman eklenmesi
- 13. numpy: bir diziye argsort uygulayarak
- 14. Objective-C'deki bir diziye katılın.
- 15. PostScript'te bir dizgiyi diziye bölme
- 16. Javascript: Bir diziye textarea dönüştürün
- 17. ListBox.ObjectCollection bir (tip) diziye dönüştürülemiyor
- 18. nasıl Numpy bir diziye bir dize değeri atamak? Böyle bir diziye bir dize atamak çalıştığınızda
- 19. Bash bir dosyadan ilişkisel bir diziye okuma
- 20. Ben bir dizi var bir diziye
- 21. Java: Bir dosyadan tamsayıları bir diziye okuma
- 22. Bir nesne değişmezini sıralı bir diziye dönüştürme
- 23. Sıralanmamış öğeleri bir dosyadan bir diziye koyma
- 24. Vim'de bir diziye nasıl bir emoji girerim?
- 25. Bölme n kelimelerin bir diziye bir dize
- 26. Bir komutun çıktısını bir diziye nasıl atayabilirim?
- 27. F # Bir diziye bir eleman ekleyin
- 28. TypeScript'te bir Set'i bir diziye nasıl dönüştürebilirim?
- 29. WinJS: En İyi Yol Kaydet Önemli Bilgiler Kaydet
- 30. Nasıl yapılır? Kaydet | Kaydet ve Kapat | ASP.NET MVC 3 RC