OpenCV saturate_cast<uchar>函数用法(饱和剔除)(像素限制溢出滤除像素设限防溢出)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV saturate_cast<uchar>函数用法(饱和剔除)(像素限制溢出滤除像素设限防溢出)相关的知识,希望对你有一定的参考价值。
saturate_cast<uchar>
主要是为了防止颜色溢出操作
原理大致如下
if(data<0)
data=0;
elseif(data>255)
data=255;
具体用法:
原图:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, const char* argv[])
Mat src, dst1, dst2;
src = imread("./test.jpg");
//if (src.empty())
if (!src.data)
printf("could not load image...\\n");
return -1;
namedWindow("input img"); //默认自动窗口大小
imshow("input img", src);
dst1 = Mat::zeros(src.size(), src.type()); //第二个参数是位深度,目前值为16
dst2 = Mat::zeros(src.size(), src.type());
//三个for循环,执行运算 g_dstImage(i,j) =a*g_srcImage(i,j) + b
for (int y = 0; y < src.rows; y++)
for (int x = 0; x < src.cols; x++)
for (int c = 0; c < 3; c++) //三个通道
dst1.at<Vec3b>(y, x)[c] = src.at<Vec3b>(y, x)[c] * 2; //不饱和滤除
dst2.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(src.at<Vec3b>(y, x)[c] * 2); //饱和滤除
namedWindow("output img1"); //默认自动窗口大小
namedWindow("output img2");
imshow("output img1", dst1);
imshow("output img2", dst2);
waitKey(0);
return 0;
编译运行结果:
代码中把每个像素点对应每个通道的值都翻了两倍,上面是没经过饱和剔除的,下面的是经过饱和剔除的
参考文章1:【OpenCV】中saturate_cast<uchar>
的含义和用法是什么?
以上是关于OpenCV saturate_cast<uchar>函数用法(饱和剔除)(像素限制溢出滤除像素设限防溢出)的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV函数convertScaleAbs()作了怎样的运算?