图像存储容器Mat

Mat类用于保存矩阵类型的数据的信息,包括:向量、矩阵、灰度或彩色图像等。
Mat类分为矩阵头和指向存储数据的矩阵指针 两部分。

  1. Mat img;
  2. img = imread("D:/OpenCV/good.jpg");
  3. if (img.empty())
  4. {
  5. cout << "error!";
  6. }

Mat类的继承

Mat,Mat,Mat,Mat,Mat_<_Tp>,最后一个是自定义模板的意思

  1. Mat a = Mat_<double>(3, 3);

Mat类的构造与赋值

仅写一种:

  1. Mat img;
  2. img = imread("D:/OpenCV/good.jpg");

Mat类的运算

乘法:默认都是size(3,3)的矩阵

  1. Mat a,b,c,d, j, m;
  2. double k;
  3. j = c * d;
  4. k = a.dot(b);
  5. m = a.mul(b);

其中:

  1. j = c * d;//做的是乘法
  1. k = a.dot(b);//做的是内积,注意这里,不论输入的两个Mat类矩阵的维数是多少,都会将Mat类的矩阵
  2. 拓展成一个行向量和一个列向量
  1. m = a.mul(b);//作对应位乘法

Mat类的元素读取

at:读取单通道或三通道的位置元素

  1. Vec3b vec = img.at<Vec3b>(0,0);
  2. int first = (int)vec.val[0];
  3. cout << first;

指针

视频加载与摄像头调用

VideoCapture类
构造一个能够读取和处理视频文件的视频流,具体读取什么文件需要通过open()函数指出,或在给出声明变量的同时也将视频数据赋值给变量(如下代码所示)。

视频加载

  1. VideoCapture video("D:/OpenCV/hxy.mp4");
  2. if (video.isOpened())
  3. {
  4. cout << video.get(CAP_PROP_FRAME_WIDTH);
  5. }
  6. while (1)
  7. {
  8. Mat frame;
  9. video >> frame;
  10. imshow("video", frame);
  11. waitKey(1000 / video.get(CAP_PROP_FPS));
  12. }

MNRJZB`N)``QO[{[Z$K]26Y.jpg
源文件:
hxy.mp4ycy.jpgycy2.jpg

摄像头调用

VideoCapture还可以直接调用摄像头。

查找设备的硬件ID:一般默认是0

image.png

  1. VideoCapture camera(0);
  2. while (1)
  3. {
  4. Mat frame;
  5. camera >> frame;
  6. imshow("video", frame);
  7. waitKey(1);//如果我不加这一句,就不会出图像,加上以后也不卡;
  8. }

数据保存

imwrite()函数
imwrite(filename,arrayname);

  1. Mat img,output;
  2. img = imread("D:/OpenCV/ycy2.jpg");
  3. if (img.empty())
  4. {
  5. cout << "error!";
  6. }
  7. imshow("ycy", img);
  8. Canny(img, output, 2, 4, 3);
  9. imshow("sorry", output);
  10. imwrite("sorry.jpg", output);

28EF%82P714G`QZ95NJ13)4.jpg
image.png
sorry.jpg

VideoWriter()函数:用于保存视频

参考文件:
1、实现代码

  1. #include<opencv2\opencv.hpp>
  2. #include<iostream>
  3. /*-------------命名空间----------------*/
  4. using namespace std;
  5. using namespace cv;
  6. /*-------------函数声明----------------*/
  7. /*-------------全局变量----------------*/
  8. /*--------------主函数-----------------*/
  9. int main()
  10. {
  11. Mat img,output;
  12. img = imread("D:/OpenCV/ycy2.jpg");
  13. if (img.empty())
  14. {
  15. cout << "error!";
  16. }
  17. imshow("ycy", img);
  18. VideoCapture camera(0);
  19. while (1)
  20. {
  21. Mat frame;
  22. camera >> frame;
  23. Canny(frame, output, 1, 2);
  24. imshow("video", frame);
  25. imshow("oooo", output);
  26. waitKey(1);
  27. }
  28. waitKey(0);
  29. return 0;
  30. }

2、附件:
hxy.mp4ycy.jpgycy2.jpg
sorry.jpg