【OpenCv】学习笔记

2020-04-15  本文已影响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; 

}

上一篇下一篇

猜你喜欢

热点阅读