2017-03-06 9 views
0

2D配列を画像に変換しようとすると、行と列が歪んでいます。同じイメージは作成できません。OpenCV 2D配列から画像への変換

using namespace cv; 
using namespace std; 


int main() 
{ 
    float val; 
    int val1[3][3]; 

    Mat imm = (Mat_<float>(3,3) << 12, 13, 45, 11, 191, 255, 62, 27, 0); 
    if (imm.empty()) //check whether the image is loaded or not 
    { 
     cout << "Error : Image cannot be loaded..!!" << endl; 
     //system("pause"); //wait for a key press 
     return -1; 
    } 

    for (int y = 0; y < imm.rows; ++y) 
    { 
     float* row_ptr = imm.ptr<float>(y); 
     for (int x = 0; x < imm.cols; ++x) 
     { 
       val = row_ptr[x]; 
       val1[y][x]=val; 
       if(x%3==0) 
       cout<<"\n"; 
       cout<<val<<"\t"; 

     } 
    } 


    Mat out_img(3,3,CV_8U ,val1); 
    cout<<"\n\n\n output= "<<out_img; 
    cout<<"\n\n\n\n"<<"Input= "<<imm; 
} 

出力我々は、我々は、出力と入力が同じではなかったことを見ることができますが、

12 13 45 
11 191 255 
62 27 0 


output= [ 12, 0, 0; 
    0, 13, 0; 
    0, 0, 45] 



Input= [12, 13, 45; 
11, 191, 255; 
62, 27, 0] 

を得ました。したがって、同じデータを再構築する際に助けが必要です。

ありがとうございました。

答えて

0

出力が歪んだのは、2d int(32ビット)配列をunsigned char(8ビット)マットに入れようとしているためです。これを修正するには、いずれかのunsigned char型に2次元配列をCV_32Sまたは変更するには、変更のマットタイプ(CV_8U)

+0

ありがとうございました。その働き。 – Baskar

0
Mat im2; 
imm.convertTo(CV_8U, im2); 

は、これはあなたにUCHARと同じイメージを与える必要があります。 forループを使用する必要はありません。

関連する問題