2011-08-03 24 views
8

Programımda görüntüyü kameradan alan ve tüm verileri OpenCV Mat yapısında paketlemem gereken bir işlev var. Kameradan görüntü arabelleğine genişlik, yükseklik ve unsigned char* olsun. Benim Soruum, global Mat değişkenim varsa Mat'ı bu verilerden nasıl oluşturabilirim. CV yapısı için CV_8UC1 aldım. opencv kamera veriminden mat oluştur

Mat image_; 

function takePhoto() { 
    unsigned int width = getWidthOfPhoto(); 
    unsinged int height = getHeightOfPhoto(); 
    unsinged char* dataBuffer = getBufferOfPhoto(); 
    Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP); 

    printf("width: %u\n", image.size().width); 
    printf("height: %u\n", image.size().height); 

    image_.create(Size(image.size().width, image.size().height), CV_8UC1); 
    image_ = image.clone(); 

    printf("width: %u\n", image_.size().width); 
    printf("height: %u\n", image_.size().height); 
} 

benim programı test

, hemen width ve image ait height fakat width ve image_ 0 benim küresel Mat height olsun. Verileri global Mat değişkenime nasıl yerleştirebilirim?

Teşekkür ederiz.

cevap

14

Ne yazık ki, ne clone() ne de copyTo() ne başarıyla genişlik/yükseklik değerlerini başka bir Mat'a kopyalamaz. En azından OpenCV 2.3'te! Bu gerçekten utanç verici. Ancak, bu sorunu çözebilir ve işlevinizi Mat döndürerek kodunuzu basitleştirebilirsiniz. Bu şekilde global bir değişkeninizin olması gerekmeyecektir:

Mat takePhoto() 
{ 
    unsigned int width = getWidthOfPhoto(); 
    unsigned int height = getHeightOfPhoto(); 
    unsigned char* dataBuffer = getBufferOfPhoto(); 
    Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP); 
    return Mat; 
} 

int main() 
{ 
    Mat any_img = takePhoto(); 
    printf("width: %u\n", any_img.size().width); 
    printf("height: %u\n", any_img.size().height); 
} 
+0

Merhaba Karlphilip, Stackoverflow'a katkıda bulunduğunuz ve bize yardımcı olduğunuz için çok teşekkür ederiz. OpenCV için yeni ve cevabınızı şu anda çalıştığım proje için oldukça faydalı buluyoruz. Hızlı bir sorum var, cv :: Mat ve cvMat ve cvCreateMat() arasındaki fark nedir? – user261002

+3

'cv :: Mat', OpenCV'nin C++ arabirimi için Mat türüdür. cvMat, C arayüzü içindir. cvCreateMat(), C arabiriminde bir "cvMat" oluşturur. Bu konuyu daha fazla ele geçirmeyelim, eğer sorularınız varsa bunları yeni konulara sormakta özgürsünüz. Görüşürüz. – karlphillip