gpt4 book ai didi

c++ - 为什么 cvCopy 不会复制我的整个图像数据?

转载 作者:行者123 更新时间:2023-11-28 00:43:02 25 4
gpt4 key购买 nike

我在我的 opencv 项目中遇到一个问题,即 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;不是所有的图像数据!
为什么 cvCopy 会这样?

最佳答案

探针是:

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

您已将深度设置为 1,但它应该类似于 IPL_DEPTH_8U。这里的depth=1并不代表1个字节,它是以位为单位的深度。您最好使用 predefined values 之一.例如

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

关于c++ - 为什么 cvCopy 不会复制我的整个图像数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com