这篇文章讨论了如何用 OpenCV 转置图像,在这里我想更进一步:假设图像是灰度图像,使用 C++ 转置它(或矩阵)的最快方法是什么?我的解决方案如下:
// image data is stored in an image buffer image*buffer_
unsigned char *mem = (unsigned char *) malloc(image.bufferSize_);
int height = image.Height();
int width = image.Width();
for(int i=0; i<height; i++)
{
unsigned char *ptr =image.buffer_+i*width;
for(int j=0; j<width; j++)
*(mem+j*height+i) = *(ptr+j);
}
memcpy(image.buffer_,mem,image.bufferSize_);
free(mem);
上面代码的一些解释:我们创建一个包含基本图像信息以及图像像素(in image.buffer_
)的图像对象。当图像像素存储在 中时image.buffer_
,我们假设图像像素是逐行保存的。关于进一步改进上述代码的任何想法?