别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

C#OpenCV算子-矩阵操作

2.1 图像相加

函数原型:

void Add(InputArray src1, InputArray src2, OutputArray dst, InputArray? mask = null, int dtype = -1)
/*
参数:
    src1:第一个输入图像。
    src2:第二个输入图像。
    dst:输出图片。
功能:
    将两图像直接进行相加融合。
*/

例子:

static void Main(string[] args)
{
    Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg");
    Mat src2 = new Mat(@"C:\Users\Administrator\Desktop\2.jpg");
    Mat dst = new Mat();
    Cv2.Add(src1, src2, dst);
    Cv2.ImShow("test", dst);
    Cv2.WaitKey();
}

实验样例:

src1

src2

dst

 

 

 

 


2.2 图像的均值及方差

函数原型:

void MeanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray? mask = null);
/*
参数:
    src:输入图像
    mean:每个通道的像素值均值
    stddev:每个通道的像素值方差
    mask:可选掩膜
功能:
    计算图像中每个通道的均值及方差
*/

例子 

static void Main(string[] args)
{
    Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg");
    Mat mean = new Mat();
    Mat stdDev = new Mat();
    Cv2.MeanStdDev(src1, mean, stddev);
    Console.WriteLine("mean:");
    for(int i =0; i < mean.Rows; i++)
    {
        for(int j =0; j < mean.Cols; j++)
        {
            Console.Write(mean.Get<byte>(i, j)+" ");
        }
    }
    Console.WriteLine("\n" + "stddev:";
    for(int i =0; i < stdDev.Rows; i++)
    {
        for(int j =0; j < stdDev.Cols; j++)
        {
            Console.Write(stdDev.Get<byte>(i, j)+" ");
        }
    }
    Console.ReadKey();
}                            

实验样例:

结果

 

 


2.3 图像融合

函数原型:

void AddWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1)
/*
参数:
    src1,第一个输入图像。
    alpha,第一个输入图像中元素权重。
    src2第二个输入图像。
    beta,第二个输入图像中元素权重。
    gamma,图1与图2作和后添加的数值。
    dst,输出图片。
功能:
    将两图像按alpha和beta值进行线性融合。
*/

例子:

static void Main(string[] args)
{
    Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg");
    Mat src2 = new Mat(@"C:\Users\Administrator\Desktop\2.jpg");
    Mat dst = new Mat();
    Cv2.AddWeighted(src1, 0.4, src2, 0.6, 0, dst);
    Cv2.ImShow("test", dst);
    Cv2.WaitKey();
}

实验样例:

src1

src2

dst

 

 

 

 


2.4 灰度拉伸

函数原型:

void ConvertScaleAbs(InputArray src, OutputArray dst, double alpha = 1, double beta = 0)
/*
参数:
    src1,输入图像。
    dst,输出图片。
    alpha,乘数因子。
    beta,偏移量。
功能:
    将原图像中每个像素值按dst=alpha*src+bet进行计算输出。
*/

例子:

static void Main(string[] args)
{
    Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg");
    Mat dst = new Mat();
    Cv2.ConvertScaleAbs(src1, dst, 1.5, 30);
    Cv2.ImShow("test", dst);
    Cv2.WaitKey();
}

实验样例:

Src1

dst

 

 

 


2.5 颜色分割

函数原型:

void InRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
/*
参数:
    src:输入图像。
    lowerb:下阈值。
    upperb:上阈值。
    dst:输出图像
功能:
    将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)。
*/

例子:

static void Main(string[] args)
{
    Mat src1 = new Mat(@"C:\Users\Administrator\Desktop\1.jpg");
    Mat dst = new Mat();
    Cv2.InRange(src1, new Scalar(50, 50, 50), new Scalar(100, 150, 200), dst);
    Cv2.ImShow("test", dst);
    Cv2.WaitKey();
}

实验样例:

Src1

dst

 

 

 

 

/*-------------------------------------------------------------------------------------------------------

笔者说明:

  该笔记来源于本人学习OpenCvSharp时的资料,

  分享出来只是为了供大家学习,并且为了自己以后想要用的时候方便寻找。

时间:2023年3月12日

------------------------------------------------------------------------------------------------------------*/ 

posted @ 2023-03-12 20:40  一路狂奔的乌龟  阅读(139)  评论(0)    收藏  举报
返回顶部