【问题标题】:Error copying data into iplimage将数据复制到 iplimage 时出错
【发布时间】: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 将其发布为答案 ;)

标签: c++ opencv


【解决方案1】:

您的程序输出显示 step 为“-1219934912”。它使您看起来好像有一个流浪的img 指针。奇怪的是,图像中的每一行都需要 ~1GB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2012-08-30
    • 2014-12-27
    相关资源
    最近更新 更多