基础是以C++开始学起,OpenCv主要用在图片处理方面,图片的本质就是矩阵。以行列为序,每个矩阵单元存储三个值,R,G,B,通过遍历每个像素元,处理图片
一,引入opencv头文件
#include <opencv2\opencv.hpp>
二,通过imread通过图片路径读取图片
1,读取进来的图片作为Mat
对象
Mat src = imread("F:\\opencv\\InputImg\\h4.jpg",IMREAD_UNCHANGED);//,IMREAD_GRAYSCALE作为灰度图像加载进来
2,判断图片是否为空
if (src.empty()) {
cout << "打开错误" << endl;
return -1;
}
三,创建OpenCv窗口
1,通过namedWindow
创建OpenCv工作窗口
namedWindow("opencv setup window", CV_WINDOW_AUTOSIZE); //创建opencv窗口 AUTOSIZE自动改变窗口大小,不能人为干预
2,在窗口中显示加载的图片
imshow("opencv setup demo", src); //显示图像
注意,这里一般是显示一张图像需创建一个openc工作窗口,但是我发现直接imshow也没有问题
四,将图像转换为灰度图像
1,创建新的Mat对象接受转换后的图片
Mat outout_image;
2,通过cvtColor方法进行转换
cvtColor(src, outout_image, CV_BGR2GRAY); //转换图像到另一个色彩空间 转换为灰度
3,显示转换后的图像
namedWindow("output window ", CV_WINDOW_AUTOSIZE);
imshow("output window", outout_image);
4,通过imWrite
保存转换后的图像
imwrite("F:/opencv/OutputImg/opencv001.png", outout_image); //保存图片
五,案例演示:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main(int argc,char**argv)
{
Mat src = imread("F:\\opencv\\InputImg\\h4.jpg",IMREAD_UNCHANGED);//,IMREAD_GRAYSCALE作为灰度图像加载进来
if (src.empty()) {
cout << "打开错误" << endl;
return -1;
}
namedWindow("opencv setup window", CV_WINDOW_AUTOSIZE); //创建opencv窗口 AUTOSIZE自动改变窗口大小,不能人为干预
imshow("opencv setup demo", src); //显示图像
namedWindow("output window ", CV_WINDOW_AUTOSIZE);
Mat outout_image;
cvtColor(src, outout_image, CV_BGR2GRAY); //转换图像到另一个色彩空间 转换为灰度
imshow("output window", outout_image);
imwrite("F:/opencv/OutputImg/opencv001.png", outout_image); //保存图片
waitKey(0);
return 0;
}