2012-01-12 25 views
9

sütunlar ekleme ve daha sonra sütun için herhangi eşdeğer yöntemi yoktur Eğer matrise varsayılan değerle satır herhangi bir sayıda eklemek yapalım yöntem Mat::resize yoktur. ve değilse bunu yapmanın en etkili yolu nedir? TeşekkürlerOpenCV OpenCV 2'de bir matris

+0

Online doc bakabilirsiniz vardı ve sütunları eklemek için bir işlev yok gibi görünüyor. http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html?highlight=mat#Mat::resize –

cevap

25

Kullanım cv::hconcat:

Mat mat; 
Mat cols; 

cv::hconcat(mat, cols, mat); 
+4

Ve bu işlev için dokümanlar bulmaya çalışmayın. Belgesiz. –

+1

Başlık kodu burada: https://github.com/Itseez/opencv/blob/master/modules/core/include/opencv2/core.hpp#L968. Bütünlüğü sağlamak için, dikey concatination da vconcat() 've' ile yapılabilir 'cv :: Mat :: push_back() ' –

+0

Belgeleri: http://docs.opencv.org/trunk/d2/de8/group__core__array.html –

3

En kötü durum senaryosu: rotate the image by 90 degrees ve Mat::resize() kullanın, sütunlar satır haline gelir.

+0

Tamam ama bu en kötü durum olduğunu ne (500 my Mat CV_64FC1 içerir ve boyutu çok büyükse * 500) ve ben matrislerin büyük sayıda bu zorundayız, bu yüzden dönen veya algoritmada iki kez böyle büyük matrisleri aktarılması işlemini dahil etmek istemiyoruz. – AMCoded

+5

Dediğim gibi, ** en kötü durum **. En iyi durumu bilseydim, seninle paylaşırdım. – karlphillip

2

OpenCV, birbiri ardına sıralı olarak matris sıralarının elemanlarını depolar, sütun boyutunu büyütmek için doğrudan bir yöntem yoktur, ancak kendimi yukarıdaki konu için iki çözüm getiriyorum, İlk olarak aşağıdaki yöntemi kullanarak (kopyalama öğelerinin sırası Diğer yöntemlerden daha az), aynı zamanda, özellikle matrislerin sonunda olmayan bazı satır veya sütun eklemek istiyorsanız benzer bir yöntem kullanabilirsiniz.

void resizeCol(Mat& m, size_t sz, const Scalar& s) 
{ 
    Mat tm(m.rows, m.cols + sz, m.type()); 
    tm.setTo(s); 
    m.copyTo(tm(Rect(Point(0, 0), m.size()))); 
    m = tm; 
} 

Diğeri sen o zaman bile satır ve sütun büyük numarası ile matris oluşturmak ve daha sonra daha küçük submatrix ile algoritma başlamak daha iyidir senin algoritmalar içine veri sırasını kopyalama dahil etmemeye ısrar eğer Matris boyutunuzu Mat::adjustROI yöntemiyle artırın.