【发布时间】:2012-04-04 03:37:51
【问题描述】:
您好,我有以下代码:
void ViewPlane::colourPixel(const int u, const int v, const Colour c){
int step = img->widthStep;
cout << "U: " << u << ", V: " << v << ", step: " << step << "\n";
cout << "Colour: " << c.r << ", " << c.g << ", " << c.b << "\n";
cout << "Data: " << v*step+u*3 << ", " << v*step+u*3+1 << ", " << v*step+u*3+2 << "\n";
cout << "Data: " << data[v*step+u*3] << ", " << data[v*step+u*3+1] << ", " << data[v*step+u*3+2] << "\n";
//swap colours round as opencv default image is bgr, not rgb
data[v*step+u*3] = c.b;
cout << "done it\n";
data[v*step+u*3+1] = c.g;
cout << "done it\n";
data[v*step+u*3+2] = c.r;
cout <<"done it\n";
}
img是IplImage指针,data是
data = (uchar *)img->imageData;
我正在循环遍历大量 u 和 v(图像坐标)的值,并为每个像素分配一种颜色。然而,当它到达 u = 148 时,代码会在该像素中途停止。
打印出这些值会显示此时的绿色像素最初包含“*”,并且是迄今为止唯一一个这样做的像素。这是输出的副本:
....
U: 146, V: 0, step: -1219934912
Colour: 0, 0, 0
Data: 438, 439, 440
Data:
done it
done it
done it
U: 147, V: 0, step: -1219934912
Colour: 0, 0, 0
Data: 441, 442, 443
Data:
done it
done it
done it
U: 148, V: 0, step: -1219934912
Colour: 0, 0, 0
Data: 444, 445, 446
Data: �, *, �
done it
所以我的问题是,这颗星是什么意思?为什么它阻止我在那里分配数据?
编辑:图片尺寸为 400x400px
PS:我刚刚尝试将绿色通道分配注释掉,然后红色通道再次发生此错误。这次它在分配之前持有'@',所以这让我认为它与出了什么问题无关......在那种情况下,到底是什么?我没有超出数组的范围,我插入的值是一个整数 0...
【问题讨论】:
-
啊..对不起,我不知道我必须这样做!
-
你没有“必须”,它只是帮助别人。
-
比起明星角色,我更担心步长是“-1219934912”。它使您看起来像是有一个流浪的
img指针。 -
你说得对,巴勃罗,干杯!现在我到底该如何接受呢? :p
-
@user1135488 将其发布为答案 ;)