C++ 基于SSE的图像阈值化
我试图用SSE优化编码一个图像分割代码。我有一个奇怪的结果。 这是我的代码:C++ 基于SSE的图像阈值化,c++,image-processing,x86,sse,simd,C++,Image Processing,X86,Sse,Simd,我试图用SSE优化编码一个图像分割代码。我有一个奇怪的结果。 这是我的代码: void binaire_sse(unsigned int * img, long h,long l, long seuil ,unsigned int * out) { __m128i vThreshold = _mm_set1_epi8(seuil); int i, j; for (i = 0; i < h; ++i) { const __m128i * p
void binaire_sse(unsigned int * img, long h,long l, long seuil ,unsigned int * out)
{
__m128i vThreshold = _mm_set1_epi8(seuil);
int i, j;
for (i = 0; i < h; ++i)
{
const __m128i * p_in = (__m128i *)&img[i * l];
uint16_t * p_out = (uint16_t *)&out[i * l / CHAR_BIT];
for (j = 0; j < l; j += 16)
{
__m128i v = _mm_load_si128(p_in);
uint16_t b;
v = _mm_add_epi8(v, vThreshold);
b = _mm_movemask_epi8(v);
*p_out = b;
p_in++;
p_out++;
}
}
}
void binaire_sse(unsigned int*img,long h,long l,long seuil,unsigned int*out)
{
__m128i vThreshold=_mm_set1_epi8(seuil);
int i,j;
对于(i=0;i
您的问题提供的细节太少,但您可能应该使用\u mm\u adds\u epu8
而不是\u mm\u add\u epi8
谢谢您的评论。我的问题是如何得到左边图片的完整阈值图像。您可以看到,我的结果中没有完整的图像(右侧的图像)。我试过你的指示,但没有改变任何事情。什么是字符位?为什么+=16?像素格式是什么?是RGB还是灰度?是每个组件8位吗?它是有签名的还是没有签名的?此外,行uint16_t*p_out=(uint16_t*)&out[i*l/CHAR\u BIT]
似乎可疑。@BenChaabenAssil那么您在初始化p_in
和p_out