Opencv C++ 图像像素操作(学习总结)

对进行图像操作可以调整图像的亮度和对比度

对比度调整的理论:

g(x,y)=alpha*f(x,y)+beta

图像灰度值反转理论:

S=L-1-r

图像线性混合操作:

g(x,y)=(1-α)*f(x,y)+α*t(x)

------其中α的取值范围为0~1之间

在执行像素操作之前,我们需要读取图像的宽、高、通道数;

获取图像的宽:image.cols

获取图像的高:image.rows

获取图像的通道数:image.channels()

image.at(x,y)读取单通道图像的像素值

float alpha=1.2;
float beta=30;   
 for (int row = 0; row < height; row++)
    {
        for (int col = 0; col < width; col++)
        {
            int pixel = src.at(row, col);
            //亮度和对比度调整
            dst.at(row,col)=alpha*pixel+beta;
            //像素反转操作
            dst.at(row, col) = 255 - pixel;
           
        }
    }

image.at(x,y)[i]读取三通道图像的像素值

    for (int row = 0; row < height; row++)
    {
        for (int col = 0; col < width; col++)
        {
                int src_bule_pixel = src.at(row, col)[0];
                int src_gule_pixel = src.at(row, col)[1];
                int src_red_pixel = src.at(row, col)[2];
                //亮度和对比度调整
                dst.at(row,col)[0]=alpha*src_blue_pixel+beta;
                dst.at(row,col)[1]=alpha*src_gule_pixel+beta;
                dst.at(row,col)[2]=alpha*src_red_pixel+beta;
                //像素反转操作
                dst.at(row, col)[0] = 255 - src_bule_pixel;
                dst.at(row, col)[1] = 255 - src_gule_pixel;
                dst.at(row, col)[2] = 255 - src_red_pixel;
        }
    }

利用相关API“addWeighted(src1,alpha,src2,(1-alpha),gamma,dst,dtype=-1)”

注意:两张图像的大小和类型必须一致才可以进行图像混合

include
include

using namespace cv;

int main(int agrc,char*agrv)
{
Mat src1,src2,dst;
src1=imread("读取一张图像")
src2=imread("读取一张图像")
if(src1.empty()||src2.empty())
{
std::cout<<"could not load image!"<

获取浮点类型(Vec3f)三通道像素值

Vec3f pixel=image.at(x,y);
float bule=pixel.val[0];
float gule=pixel.val[1];
float red=pixel.val[2];

图像类型转换

使用image.converTo(dst,type)对图像进行类型转换

CV_8UC1为单通道uchar类型

CV32F1 为单通道float类型

确保值大小范围在0~255之间的API

saturate_cast(value)

你可能感兴趣的:(图像处理,opencv)