cvCopy 関数が通常の動作をしていないという私の opencv poroject の問題に連絡しました。だから私はそれをテストするためにこのコードを書きます。
int n = 6;
IplImage* img = cvCreateImage( cvSize(n,n) ,1 ,1 );
uchar* ptr = (uchar*)(img->imageData);
for(int i = 0 ; i< n*n ; i++)
{
ptr[i] = i+1;
}
std::cout << "befor copy" << std::endl;
for( int i =0 ; i < n*n ;i++) //print the imageData of img
{
if ( i % n == 0 )
std::cout<<std::endl;
std::cout << std::setw(4) <<(int) ptr[i];
}
IplImage* img2 = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
cvCopy(img,img2);
ptr = (uchar*)(img2->imageData);
std::cout << "\nafter copy" << std::endl;
for( int i =0 ; i < n*n ;i++) //print the imageData of img2
{
if ( i % n == 0 )
std::cout<<std::endl;
std::cout << std::setw(4) <<(int) ptr[i];
}
std::cout<<std::endl;
しかし、出力は次 のとおりです。
befor copy
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
after copy
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 0 0 0 0
0 0 0 0 0 0
つまり、26 番までコピーしただけです。すべての imageData ではありません!
cvCopy がこのように動作するのはなぜですか?