为什么cvCopy不会复制我的整个imageData?

时间:2013-07-23 14:06:04

标签: c++ opencv

我在opencv poroject中联系了一个问题,即cvCopy函数没有正常行为!所以我写这段代码来测试它。

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会像这样?

1 个答案:

答案 0 :(得分:3)

探测器是:

IplImage* img = cvCreateImage( cvSize(n,n) ,1 ,1 );

您已将深度设置为1,但它应该类似于IPL_DEPTH_8U。 这里深度= 1并不意味着1个字节,它是深度的比特。您最好使用其中一个predefined values。 E.g。

IplImage* img = cvCreateImage(cvSize(n, n), IPL_DEPTH_8U, 1);