图像存储容器Mat
Mat类用于保存矩阵类型的数据的信息,包括:向量、矩阵、灰度或彩色图像等。
Mat类分为矩阵头和指向存储数据的矩阵指针 两部分。
Mat img;img = imread("D:/OpenCV/good.jpg");if (img.empty()){cout << "error!";}
Mat类的继承
Mat
Mat a = Mat_<double>(3, 3);
Mat类的构造与赋值
仅写一种:
Mat img;img = imread("D:/OpenCV/good.jpg");
Mat类的运算
乘法:默认都是size(3,3)的矩阵
Mat a,b,c,d, j, m;double k;j = c * d;k = a.dot(b);m = a.mul(b);
其中:
j = c * d;//做的是乘法
k = a.dot(b);//做的是内积,注意这里,不论输入的两个Mat类矩阵的维数是多少,都会将Mat类的矩阵拓展成一个行向量和一个列向量
m = a.mul(b);//作对应位乘法
Mat类的元素读取
at:读取单通道或三通道的位置元素
Vec3b vec = img.at<Vec3b>(0,0);int first = (int)vec.val[0];cout << first;
指针
视频加载与摄像头调用
VideoCapture类
构造一个能够读取和处理视频文件的视频流,具体读取什么文件需要通过open()函数指出,或在给出声明变量的同时也将视频数据赋值给变量(如下代码所示)。
视频加载
VideoCapture video("D:/OpenCV/hxy.mp4");if (video.isOpened()){cout << video.get(CAP_PROP_FRAME_WIDTH);}while (1){Mat frame;video >> frame;imshow("video", frame);waitKey(1000 / video.get(CAP_PROP_FPS));}
摄像头调用
VideoCapture还可以直接调用摄像头。
查找设备的硬件ID:一般默认是0

VideoCapture camera(0);while (1){Mat frame;camera >> frame;imshow("video", frame);waitKey(1);//如果我不加这一句,就不会出图像,加上以后也不卡;}
数据保存
imwrite()函数
imwrite(filename,arrayname);
Mat img,output;img = imread("D:/OpenCV/ycy2.jpg");if (img.empty()){cout << "error!";}imshow("ycy", img);Canny(img, output, 2, 4, 3);imshow("sorry", output);imwrite("sorry.jpg", output);
VideoWriter()函数:用于保存视频
参考文件:
1、实现代码
#include<opencv2\opencv.hpp>#include<iostream>/*-------------命名空间----------------*/using namespace std;using namespace cv;/*-------------函数声明----------------*//*-------------全局变量----------------*//*--------------主函数-----------------*/int main(){Mat img,output;img = imread("D:/OpenCV/ycy2.jpg");if (img.empty()){cout << "error!";}imshow("ycy", img);VideoCapture camera(0);while (1){Mat frame;camera >> frame;Canny(frame, output, 1, 2);imshow("video", frame);imshow("oooo", output);waitKey(1);}waitKey(0);return 0;}
![MNRJZB`N)``QO[{[Z$K]26Y.jpg](/uploads/projects/zhinengche@pbd7w6/552295afb7a485eb28211b9641a4d326.jpeg)


