【发布时间】:2011-12-08 06:35:59
【问题描述】:
嗯,这个帖子就是Why is memcpy() and memmove() faster than pointer increments?的原因
我有一个具有 4 个通道的自定义图像结构,我喜欢将其中的 3 个 (RGB) 提取到具有 3 个通道的 openCV cv::MAt 结构中。
cv::Mat GetColorImgFromFrame(Image* pimg)
{
int iHeight = pimg->m_imageInfo.m_height;
int iWidth = pimg->m_imageInfo.m_width;
cv::Mat cvmColorImg = cv::Mat::zeros(iHeight, iWidth, CV_8UC3);
int iDestStep = cvmColorImg.channels(); // 3
uchar* pucSrc = pimg->m_data;
uchar* pucDest = cvmColorImg.data;
uchar* pucDestLimit = cvmColorImg.data + iHeight*iWidth*iDestStep;
for (;pucDest < pucDestLimit;)
{
*(pucDest++) = *(pucSrc++);
*(pucDest++) = *(pucSrc++);
*(pucDest++) = *(pucSrc++);
pucSrc++;
}
return cvmColorImg;
}
用 memcpy(pucDest, pucSrc, 3) 替换三个内部赋值似乎没有多大帮助。有什么建议?
【问题讨论】:
-
你的代码C语言有语法错误,建议你不要尝试写多语言源文件:真的很难!
-
只是好奇,为什么要使用
for循环,但将其简化为本质上的while循环? -
@pmg: 你能指出语法错误吗?谢谢!
-
@Peter:好吧,我在搞乱循环。它最初是一个 for 循环,但经过几次迭代后变成了现在的样子。:)
-
惊讶于没有提出强制性问题:您确定这实际上是性能瓶颈吗?在我看来,您的平均 OpenCV 操作将比仅复制一些字节要慢得多。