gpt4 book ai didi

c++ - 快速访问 jpeg 图像的像素值

转载 作者:行者123 更新时间:2023-11-30 03:09:34 24 4
gpt4 key购买 nike

CompVision 再次,我在我的应用程序中使用 jpeg 图像。只是因为我对 MFCATL 有点熟悉,所以我使用 CImage 来访问像素值。

根据我的需要,我在初始化期间计算图像的亮度矩阵。功能是这样的(Image是我自己的类名,不重要,亮的是float[][]):

 void Image::fillBrightnessMatrix(){
COLORREF val;
for(int i=0;i<width;i++){
for(int j=0; j<height;j++){
val=src.GetPixel(i,j);
bright[i][j]=rgb_to_L(val);
}
}
}

其中 src 是 CImage 类的一个实例,rgb_to_L - 一些计算颜色亮度的函数。

检查我的应用程序的性能时,我发现 GetPixel 是最昂贵的操作,它显着(实际上,比任何其他操作慢 700 倍)减慢了整个图像的初始化速度。 问题是,您可以推荐哪个库来快速访问单个像素值?除了加载 jpeg 图像和访问单个像素外,我不需要任何其他操作。性能很重要,因为我的应用程序处理大约 3000 张图像,我等不及要等几个小时才能得到结果。

最佳答案

使用 CBitmap::GetBits() 获取指向像素数据的原始指针。您现在可以直接在像素上聚会,而无需通过昂贵的 GetPixel() 方法。执行此操作时需要注意许多事项:

  • 您必须使用 CBitmap::GetPitch() 来计算行首的偏移量。间距与宽度不同。
  • 位图中的线条是倒置的
  • 您必须自己处理像素格式。 24bpp 的图像每个像素存储 3 个字节。像 8bpp 这样的索引格式需要在颜色表中查找颜色。 32bpp 是最简单的,每个像素 4 个字节,间距始终与宽度相同。

关于c++ - 快速访问 jpeg 图像的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4009480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com