我无法快速访问无符号字符数组。
我想实际将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!
}
}
谢谢!
答案 0 :(得分:1)
不应该 - 除非你在8086上这样做,否则没有办法在640x480上花费0.5秒。是否还有其他代码没有显示?目标内存当前没有任何地方
ps看看cvCvtColor()它使用优化的SSE2 / SIMD指令来做到这一点
答案 1 :(得分:0)
您正在阅读的内存中有哪些硬件?也许该设备对其使用的内存的带宽有限,或者RAM速度较慢。如果许多设备共享内存,则其访问权限也可能存在瓶颈。尝试使用memcpy()读取整个屏幕(?)到本地内存,在本地RAM中对其执行操作,然后使用memcpy()将其写回。这将减少您必须协商访问它的次数,从640 * 480到1。