您的位置:首页 > 运维架构

Opencv中防止像素数据溢出介绍

2018-02-01 23:45 169 查看
我们在通过Opencv操作像素数据的时候,很容易就会使得颜色值超出255,在Opencv中有一个函数就可以解决这一问题。

saturate_cas<>():保证数据不溢出。

比如我们想增加一张图片的亮度,那么我们需要作如下操作:

JNIEXPORT jintArray JNICALL
Java_com_xy_opencv_ndk_1opencv002_MainActivity_lightImage(JNIEnv *env, jclass type, jintArray pixels_, jint w, jint h) {
jint *pixels = env->GetIntArrayElements(pixels_, NULL);

Mat img(h, w, CV_8UC4, pixels);

uchar *ptr = img.ptr(0);
//    saturate_cast:这个函数保证值类型不溢出
for (int i = 0; i < w * h; ++i) {
ptr[4 * i + 0] = saturate_cast<uchar>(ptr[4 * i + 0] + 50);
ptr[4 * i + 1] = saturate_cast<uchar>(ptr[4 * i + 1] + 50);
ptr[4 * i + 2] = saturate_cast<uchar>(ptr[4 * i + 2] + 50);
}

int size = w * h;
jintArray result = env->NewIntArray(size);
env->SetIntArrayRegion(result, 0, size, pixels);
env->ReleaseIntArrayElements(pixels_, pixels, 0);
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息