2015-11-05 57 views
3

我在OpenCV的編程初學者,我嘗試讀取圖像(CV :: MAT)和它的數據複製到UCHAR的一些載體,然後創建圖像回從矢量。CV :: imwrite從STD的緩衝:: vector的

即讀墊,墊轉換到std :: vector的,然後再創建從載體墊。需要

載體爲像素數據的中間轉換。 我選擇了 Convert Mat to Array/Vector in OpenCV

對於vector-Mat的轉換。

int main() 
{ 
    Mat image = imread("c:\\cv\\abc.bmp"); 
    std::vector<unsigned char> src_vec; 
    src_vec.assign(image.datastart, image.dataend); 
    cv::Mat dest(src_vec, true); 
    try { 
     imwrite("dest.bmp", dest); 

    } 
    catch (runtime_error& ex) { 
     fprintf(stderr, "Exception saving the image: %s\n", ex.what()); 
     return 1; 
    } 
    return 0; 
} 

輸出的圖像似乎是垃圾,我怎麼可以設置DEST墊與矢量數據抑或是我創造的錯誤的方式載體本身。 任何指導都會有所幫助。

回答

1

你缺少頭信息。 vector只包含像素數據。您必須將標題數據保存在某個地方,然後再將它傳遞到mat。 在以下示例中,標題數據直接從源圖像中獲取。您也可以將它保存在一些整數變量中,並再次將它傳遞給新的mat的標題。

Mat image = imread("c:\\cv\\abc.bmp"); 
    std::vector<unsigned char> src_vec; 
    src_vec.assign(image.datastart, image.dataend); 
    cv::Mat dest(image.rows,image.cols,image.type()); 
    dest.data = src_vec.data(); 
    try { 
     imshow("sss", dest); 
     cv::waitKey(); 
     //or show using imshow - nothing is shown 
    } 
    catch (runtime_error& ex) { 
     fprintf(stderr, "Exception saving the image: %s\n", ex.what()); 
     return 1; 
    } 
    return 0; 

P.S.儘量不要使用\\這是Windows的東西。使用/,它是跨平臺的。

+0

謝謝lot..that是有幫助:) – Hummingbird