图像处理中Stride和Width的关系

  一行有 11 个像素(Width = 11), 对一个 32 位(每个像素 4 字节)的图像, Stride = 11 * 4 = 44.

  但还有个字节对齐的问题, 譬如:

  一行有 11 个像素(Width = 11), 对一个 24 位(每个像素 3 字节)的图像, Stride = 11 * 3 + 3 = 36.

  为什么不是 Stride = 33? 因为它是按 4 字节对齐的.

  根据上面道理, 我们可以手动计算 Stride 的值:

  1、Stride = 每像素占用的字节数(也就是像素位数/8) * Width;

  2、如果 Stride 不是 4 的倍数, 那么 Stride = Stride + (4 - Stride mod 4);

转载于:https://www.cnblogs.com/dearzhoubi/p/8655326.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用AVX指令集进行图像处理的C++代码示例: ```c++ #include <immintrin.h> // 包含AVX指令集头文件 void avx_image_process(unsigned char* src, unsigned char* dst, int width, int height) { const int channels = 3; // 图像通道数 const int simd_size = 32; // AVX指令集的SIMD宽度为32字节 const int simd_channels = simd_size / channels; // 每个SIMD指令可以处理的通道数 // 计算图像每行的字节数 const int src_stride = width * channels; const int dst_stride = width * channels; // 计算需要处理的像素数 const int pixel_count = width * height; // 计算需要处理的SIMD指令数 const int simd_count = pixel_count / simd_channels; // 循环处理每个SIMD指令 for (int i = 0; i < simd_count; i++) { // 加载SIMD指令需要处理的像素数据 __m256i src_data = _mm256_loadu_si256((__m256i*)(src + i * simd_size)); // 进行图像处理操作,这里只是一个示例,可以根据实际需求进行修改 src_data = _mm256_add_epi8(src_data, _mm256_set1_epi8(128)); // 存储处理后的像素数据 _mm256_storeu_si256((__m256i*)(dst + i * simd_size), src_data); } // 处理剩余的像素数据 for (int i = simd_count * simd_channels; i < pixel_count; i++) { // 进行图像处理操作,这里只是一个示例,可以根据实际需求进行修改 dst[i] = src[i] + 128; } } ``` 该代码使用AVX指令集对图像进行处理,可以大大提高图像处理的速度。具体来说,该代码将图像数据按照AVX指令集的SIMD宽度进行划分,然后使用AVX指令集对每个SIMD指令的像素数据进行处理。由于AVX指令集可以同时处理多个数据,因此可以大大提高图像处理的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值