Opencv其实就一个有关视觉处理的库,就和学C语言的时候用的math那一堆库一样。
先简单记录一些基础函数学习:
1.展示图片
2.灰度图片
3.调用摄像头
4.读取视频
1.展示图片
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("Resources/cards.jpg");
imshow("img", src);
waitKey(0);
return 0;
}
代码解释:
#include <opencv2/opencv.hpp>
#include <iostream>
分别引入opencv的库和c++的标准库
using namespace std;
using namespace cv;
这两句是引入工作空间,std是c++标准库的工作空间名,cv是opencv的工作空间名。
工作空间:是为了避免 如果两个库中有相同的函数名,在调用函数时会发生冲突。
Mat src = imread("Resources/cards.jpg");//其实是两条语句合在一起。分别为:
Mat src;//定义一个Mat类型的变量,变量名是src
src = imread("bilibili.jpg");//调用imread函数读取图片并把这张图片赋值给src。
imshow("img",src);//调用函数imshow展示图片,第一个参数img是显示图片所用的窗口的名字,src是上面刚刚被一张图片赋值的变量。
waitkey(0);//显示图片后开始等待下一步操作。如果不加这条命令的话,自己屏幕上会有一个黑框一闪而过,
//图片也不会显示出来,因为程序没有停下来,显示图片后直接关闭了程序。
其中的cards.jpg图片是放在资源文件Resources内的,如果放在与cpp相同的文件夹内的话,就可以直接读取,或者可以使用图片所在位置的绝对路径。
效果:

2.灰度照片
读取灰度照片有两种方法:一种是在读取照片的时候就按照灰度格式读取,第二种是先读取之后再转换。
第一种方法:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("Resources/cards.jpg",0);
imshow("img",src);
waitKey(0);
return 0;
}
代码解释:
与之前的代码唯一区别就是imread的参数不同
Mat src = imread("Resources/cards.jpg",0);
//imread()函数有两个参数,第一个参数是图片的路径或图片的名字,第二个参数是以何种格式来读取图片。
//默认值是1,也就是原本的格式读取;如果输入参数为0的话就是以黑白格式读取。
第二种方法:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("Resources/cards.jpg");
Mat dst;
cvtColor(src,dst,COLOR_BGR2GRAY);
imshow("img",dst);
waitKey(0);
return 0;
}
代码解释:
//我们的操作是新建了一个Mat对象dst,又调用了函数cvtColor()来进行图片的灰度化,最终显示的图片也变成了dst。
cvtColor(src,dst,COLOR_BGR2GRAY);//第一个参数是输入图像,第二个参数是输出图像,第三个参数是进行何种转换。
效果:

3.调用摄像头
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap(0);
Mat img;
while (true) {
cap.read(img);
imshow("Image", img);
waitKey(1);
}
return 0;
}
代码解释:
VideoCapture cap(0);//调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2
Mat img;//定义Mat图像变量
//循环
while (true) {
cap.read(img);//获取摄像头画面
imshow("Image", img);//读取摄像头画面
waitKey(1);//延时1s
}
4.读取视频
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
string path = "Resources/test_video.mp4";
VideoCapture cap(path);
Mat img;
while (1) {
cap.read(img);
imshow("Image", img);
waitKey(1);
}
return 0;
}
代码解释:
string path = "Resources/test_video.mp4";//变量保存视频
VideoCapture cap(path);//读取视频
Mat img;
//循环
while (1) {
cap.read(img);//获取视频
imshow("Image", img);//读取播放视频
waitKey(1);//延时
}