C ++解除引用char-Pointer(图像数组)非常慢

时间:2011-02-09 17:20:39

标签: c++ pointers dereference

我无法快速访问无符号字符数组。

我想实际将BGRABGRA .... BGRABGRA ....行编码图像数组复制到使用三层的OpenCV版本。下面的代码工作正常但非常慢(640 * 480图像大约0.5秒)。我指出解除引用运算符*使它变慢。你有什么计划如何解决这个问题吗? (提示:BYTE是一个未签名的字符)

// run thorugh all pixels and copy image data
for (int y = 0; y<imHeight; y++){
    BYTE* pLine= vrIm->mp_buffer + y * vrIm->m_pitch;
    for (int x = 0; x<imWidth; x++){
        BYTE* b= pLine++; // fast pointer operation
        BYTE* g= pLine++;
        BYTE* r= pLine++;
        BYTE* a= pLine++; // (alpha)
        BYTE bc = *b; // this is really slow!
        BYTE gc = *g; // this is really slow!
        BYTE rc = *r; // this is really slow!

    }
}

谢谢!

2 个答案:

答案 0 :(得分:1)

不应该 - 除非你在8086上这样做,否则没有办法在640x480上花费0.5秒。是否还有其他代码没有显示?目标内存当前没有任何地方

ps看看cvCvtColor()它使用优化的SSE2 / SIMD指令来做到这一点

答案 1 :(得分:0)

您正在阅读的内存中有哪些硬件?也许该设备对其使用的内存的带宽有限,或者RAM速度较慢。如果许多设备共享内存,则其访问权限也可能存在瓶颈。尝试使用memcpy()读取整个屏幕(?)到本地内存,在本地RAM中对其执行操作,然后使用memcpy()将其写回。这将减少您必须协商访问它的次数,从640 * 480到1。