一、大体展示如何获取一张图片并显示在窗口上
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat src = imread("D:\\timg (1).jpg", IMREAD_GRAYSCALE);//读取进来的数据以矩阵的形势,第二个参数代表显示一张灰度图像。
if (src.empty())
{
printf("could not load image");//如果图片不存在 将无法读取,打印到终端。
return -1;
}
//超过屏幕的图像无法显示时候调用此函数。
namedWindow("输入窗口", WINDOW_FREERATIO);//创建了一个新窗口,参数1表示名称,第二个参数代表一个自由的比例
imshow("输入窗口", src);//表示显示在新创建的输入窗口上,第一个参数表示窗口名称,src表示数据对象Mat
waitKey(0);//执行到这句,程序阻塞。参数表示延时时间。单位ms
destroyAllWindows();//销毁前面创建的显示窗口
return 0;
}
二、什么是图像
图像在屏幕上的显示依靠的是像素,像素越多越清晰
单纯的像素绘制为二进制图像
增加更多细节
灰度图像:
对于彩色图像我们有三个灰度(红色 绿色 蓝色)
rgb将这些混合起来
三、 加载图像视频和网络摄像头
1.我们需要的三个头文件
#include<opencv2/highgui.hpp>;
#include<opencv2/imgcodecs.hpp>;
#include<opencv2/imgproc.hpp>;
常用的从文件加载图片的imread,保存图片到文件的imwrite,从内存加载图片或者将图片编码后放到内存缓冲区的imencode/imdecode都在这个头文件中.
2.导入图片数据 并显示图片
(mat本质上为矩阵,用于处理图像)
3.导入视频
ps:视频相当大量于按帧分布的图片,可以用while循环放到mat来读取
读取视频数据
(路径建议不要有中文,也不要太长)
如果想慢一点可以自己调节等待的毫秒waitKey(20),但是会有错误,因为没有更多的图像显示;
#include <iostream>
#include<opencv2/highgui.hpp>;
#include<opencv2/imgcodecs.hpp>;
#include<opencv2/imgproc.hpp>;
using namespace std;
using namespace cv;
int main() {
VideoCapture cap("D:/1 (2).mp4");
Mat imag;
while (true) {
cap.read(imag);
imshow("Image", imag);
waitKey(1);
}
}
3.摄像头
videocapture 代表要调用的摄像头的索引,如果只有一个摄像头就设置索引为0就可以了,
四、基本功能
1.将图像转换为灰度
#include <iostream>
#include<opencv2/highgui.hpp>;
#include<opencv2/imgcodecs.hpp>;
#include<opencv2/imgproc.hpp>;
using namespace std;
using namespace cv;
int main() {
Mat img=imread("D:/aaaaaa.jpg");
Mat imgG;
//执行灰度的操作
cvtColor(img, imgG, COLOR_BGR2GRAY);
imshow("Image", img);
imshow("imgG", imgG);
waitKey(0);
}
2.高斯模糊
#include <iostream>
#include<opencv2/highgui.hpp>;
#include<opencv2/imgcodecs.hpp>;
#include<opencv2/imgproc.hpp>;
using namespace std;
using namespace cv;
int main() {
Mat img=imread("D:/aaaaaa.jp