【OpenCv】学习笔记
前言:
【#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;
}