美文网首页
【OpenCv】学习笔记

【OpenCv】学习笔记

作者: 冬天都会过去 | 来源:发表于2020-04-15 23:26 被阅读0次

    前言:

    【#include <opencv2/opencv.hpp>】中“opencv2”中的”2”并不表示OpenCV的版本号。

    我们知道,OpenCV是基于C/C++的,”cv”和”cv2”表示的是底层C API和C++API的区别,”cv2”表示使用的是C++API。

    1、像素范围处理函数saturate_cast<uchar>

    saturate_cast<uchar>(-100),返回0;

    saturate_cast<uchar>(288),返回255;

    saturate_cast<uchar>(100),返回100;

    这个函数的功能是确保RGB值的范围在0~255之间。

    2、Filter2D函数

    (通过图像的掩膜操作实现图像的对比度增强:根据掩膜重新计算图片中每个像素的像素值)

    图像的掩膜操作

    函数调用filter2D功能:

    (1)定义掩膜:Mat kernel = {Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0};

    (2)filter2D(src,dst,ddepth,kernel):

    其中src与dst是Mat类型变量,src: 输入图像   dst: 输出图像;

    目标图像深度ddepth:和输入图像具有相同的尺寸和通道数量 src.depth(),如果没写将生成与原图像深度相同的图像,当ddepth输入值为-1时,目标图像和原图像深度保持一致;

    kernel是定义的掩膜。

    3、getTickCount函数、getTickFrequency()函数

    OpenCV中经常会使用getTickCount()和getTickFrequency()来计算程序执行时间:

    double t = getTickCount();

    程序代码xxxxxx

    double timeconsume = (getTickCount() - t) / getTickFrequency(); //计算时间消耗长短函数

    getTickCount():用于返回从操作系统启动到当前所经的计时周期数; 

    getTcikFrequency():用于返回CPU的频率。(C++中单位为秒,也就是每秒重复的次数);

    所以 (getTickCount() - t) / getTcikFrequency():(当前次数-开始计时次数)/每秒重复次数=从开始到当前所用时间(s)。

    4、opencv中CV_8UC3含义

    预定义类型的结构:  CV_<bit_depth>(S|U|F)C<number_of_channels>  

    (1) bit_depth:比特数,代表8bite\16bite\32bite\64bite  

    eg:8表示你所创建的储存图片的Mat对象中,每个像素点在内存空间所占的空间大小8bite。

      (2) S|U|F  

    S: signed int,即有符号整型;  U: unsigned int,即无符号整型;  F: float,单精度浮点型。  

    (3) C<number_of_channels>:所存储的图片的通道数。 

    channels = 1:灰度图片--grayImg---是--单通道图像  

    channels = 3:RGB彩色图像---------是--3通道图像  

    channels = 4:带Alph通道的RGB图像--是--4通道图像

    5、Scalar函数

    scalar:将图像设置成单一灰度和颜色,后面向量的位数是和图像通道数一致。

    Scalar(0, 0, 255)代表将三通道图像设置为全红色。cvScala的储存顺序是B-G-R,而CV_RGB的储存顺序是R-G-B,两者正好相反,所以cvScalar(0, 0, 255)实际意思是R=255,即为红色的。

    下面给出示例代码:【定义一个矩阵并对其附上颜色:Scalar函数的使用】

    #include<opencv2/opencv.hpp> 

    #include<iostream>  

    using namespace std; 

    using namespace cv;  

    int main(int argc,char** argv) 

    {  

    Mat src;  

    src = imread("F:/20.jpg"); 

    if (src.empty())  {   

    cout << "读取图片有误" << endl;   

    waitKey(0);   

    return -1;  }  

    namedWindow("loadimage", WINDOW_AUTOSIZE); 

     imshow("loadimage", src);  

    Mat dst;  

    dst=Mat(src.size(),src.type());    //创建一个矩阵根据src的大小和类型,赋予了矩阵的大小和矩阵元素的种类  

    dst = Scalar(255,0,0);   //给创建的矩阵上的每个点付给幅值,给予颜色 

     //dst(a,b,c)函数的三个参数a:蓝色,b:绿色,c:红色;幅度是0-255设置坐标点的参数。 

    //opencv是bgr图像  

    namedWindow("outputpic",CV_WINDOW_AUTOSIZE); 

    imshow("outputpic",dst);  

    waitKey(0);  

    return 0; 

    }

    相关文章

      网友评论

          本文标题:【OpenCv】学习笔记

          本文链接:https://www.haomeiwen.com/subject/yrcaphtx.html