OpenCV学习笔记 _01

OpenCV学习笔记 01


  1. 视频显示方式

    ①视频以形式显示,需反复读取并刷新

    ②OpenCV所打开的视频文件会进入一个图像输入流中等待输入

    所以,一般的显示方法如下:

    while(1)
    {
        Mat frame;
        video >> frame;
        if(frame.empty())
        {
            break;
        }
        imshow("窗口名称",frame);
        waitKey(1000/30);                //自行设置刷新率,1000单位为豪秒
    }
    

一、图像颜色空间

1.YUV、HSV、RGB、Lab

颜色模型转换:

void cv::cvtColor(InputArray src     
                  OUtputArray dst
                  int code            //转换颜色标志
                  int dstCn)          //输出矩阵通道数

2.多通道分离与合并

通道分离函数split :将「输入」的通道拆分,存入「输出」(数组形式 or Vector)

void cv::split(const Mat * input,
               Mat * output         //Mat类的数组
              )
void cv::split(InputArray input,
               OutputArrayofArray output   //Vector<Array>
              )

多通道合并函数merge:「输入」(数组形式),输出各通道合并后的结果

void cv::merge( const Mat * input,    //输入一个Mat数组
                size_t count,         //输入需要合并数组前多少项>0
                OutputArray output    //输出
              )
void cv::merge( InputArrayofArray input,    //输入一个Vector<Array>    
                OutputArray output    //输出
              )

二、像素操作处理

1.单幅图像素操作

1.1 像素最大最小值

用于求灰度值最大的元素

void cv::minMaxLoc(InputArray input,
                   double * minVal,    //矩阵中的最小值
                   double * maxVal, 
                   Point * minLoc = 0, //上述最小值**按行扫描**第一次出现的位置
                   Point * maxLoc = 0, 
                   InputArray  mask = noArray()    //可设定应用范围遮罩
                  )        
1.2 图像平均值与标准差

图像平均值:衡量图像整体亮度,平均值越高整体越亮

图像标准差:衡量图像对比度、像素均值的离散程度,标准差越大图像质量越好

只计算平均值–>mean()

cv::Scalar cv::mean(InputArray input,       //Mat
                    INputArray mask = noArray(),  
                   )
//Scalar是opencv的一个Struct,是一个存放4个double值的数组    

平均值 && 标准差–>meanStdDev()

void cv::meanStdDev(InputArray src,        //输入图像
                    OutputArray mean,      //各个通道的像素平均值(Mat)
                    OutputArray stddev,    //各个通道的像素标准差(Mat)
                    InputArray mask = noArray()
                   )

2.两图之间的像素操作

2.1 比较运算(max,min)

max/min:输入两个Mat类对象,输出一个各个像素取最大/最小值的Mat类对象

用途:与掩膜图像运算实现抠图、与特定颜色的掩膜遮罩实现过滤指定颜色

void cv::max(InputArray input1, 
             InputArray input2, 
             OutputArray dst
            )
void cv::min(InputArray input1, 
             InputArray input2, 
             OutputArray dst
            )
2.2 逻辑运算

”与、或、异或、非“

① 会自动转换为Binary后进行按位运算(00000101—>11111010)

② 函数为

            bitwise_and()、bitwise)_or()、bitwise_xor()、bitwise_not()cpp
void cv::bitwise_and(InputArray input1, 
                     InputArray input2, 
                     OutputArray dst,
                     InputArray mask = noArray()
                    )        

3. 图像二值化

二值图像:每个像素点均为黑色或者白色的图像。二值图像一般用来描述字符图像,其优点是占用空间少,高度压缩

3.1 单阈值二值化threshold()
3.1.1 手动设定阈值
double cv::threshold(InputArray input,
                     OutputArray output,
                     double thresh,    //手动设置阈值
 /*若选择BINARY模式*/  double maxval,    //BIANRY模式下设置最大值
                     int type          //二值化算法
                    )
THRESH_BINARY高于阈值置最大,低于阈值置0
THRESH_BINARY_INV高于阈值置0,低于阈值置最大
THRESH_TRUNC高于阈值置为阈值
THRESH_TOZERO高于阈值置为0
THRESH_TOZERO_INV低于阈值置为0
3.1.2 自动计算阈值

大 津 法:THRESH_OTSU

三角形法:THRESH_TRIANGLE

double cv::threshold(InputArray input,
                     OutputArray output,
                     double thresh,    //手动设置阈值
 /*若选择BINARY模式*/  double maxval,    //BIANRY模式下设置最大值
                     int type          //二值化算法
                    )
eg.  threshold(input,output,100,255,THRESH_BINARY | THRESH_OTSU)
3.2 多阈值二值化

LUT表(多阈值表)

① 对原有像素值(0~255)向LUT表进行映射,将每个区间段映射为一个值

② 使用LUT表进行二值化

void cv::LUT(InputArray input,
             InputArray lut,        //完成映射的LUT表
             OutputArray output
            )
3.3 局部自适应阈值二值化adaptiveTreshold()

均值法:ADAPTIVE_THRESH_MEAN_C

高斯法:ADAPTIVE_THRESH_GUASSIAN_C

double cv::adaptiveThreshold(InputArray input,
                             OutputArray output,
 /*若选择BINARY模式*/         double maxval,              //BIANRY模式下设置最大值
                             int adaptiveMethod,         //自适应算法
                             int thresholdType,          //二值化方法
                             int blockSize,             
//自适应二值化通过动态计算像素邻域的平均值来确定阈值,blockSize为邻域大小,为奇数
                             double c                    //阈值调整系数
                            )
eg.adaptiveThreshold(input,output,255,
                     ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,55,0)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值