Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于SSE的图像阈值化_C++_Image Processing_X86_Sse_Simd - Fatal编程技术网

C++ 基于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

我试图用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_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