一、基本操作
1.读取图片
#include <opencv2/imgcodecs.hpp> //包含opencv库的头文件,用于图像编码和解码
#include <opencv2/highgui.hpp> //包含opencv库的头文件,用于图像显示和交互
#include <opencv2/imgproc.hpp> //包含opencv库的头文件,用于图像处理
#include <iostream> //包含标准库的头文件,用于输入输出流
using namespace cv; //使用cv命名空间,简化代码
using namespace std; //使用std命名空间,简化代码
int main() //主函数
{
string path = "D:\\popo\\test.png"; //定义一个字符串变量,存储图像的路径
Mat img = imread(path); //定义一个Mat类型的变量,用于存储读取的图像
imshow("Image", img); //显示图像,第一个参数是窗口的名称,第二个参数是图像变量
waitKey(0); //等待用户按键,参数是等待的毫秒数,0表示无限等待
return 0; //返回0,表示程序正常结束
}
Mat cv::imread(const String &filename, int flags = IMREAD_COLOR)
后面一个参数是设置图像的色彩,默认是1也就是彩色,如果是0则是黑白照片
该函数用于从文件中加载图片
void cv::imshow(cosnst String &winnanme, InputArray mat)
用于显示图像
int cv::waitKey(int delay = 0)
等待用户按键,参数是等待的毫秒数,0表示无限等待,则会一直显示照片,否则照片一闪而过
2.读取视频
#include <opencv2/imgcodecs.hpp> //包含opencv库的头文件,用于图像编码和解码
#include <opencv2/highgui.hpp> //包含opencv库的头文件,用于图像显示和交互
#include <opencv2/imgproc.hpp> //包含opencv库的头文件,用于图像处理
#include <iostream> //包含标准库的头文件,用于输入输出流
using namespace cv; //使用cv命名空间,简化代码
using namespace std; //使用std命名空间,简化代码
int main() //主函数
{
string path = "D:\\software\\opencv\\opencv\\sources\\samples\\data\\vtest.avi"; //定义一个字符串变量,存储视频文件的路径
VideoCapture cap(path); //定义一个VideoCapture类型的变量,用于捕捉视频文件
Mat img; //定义一个Mat类型的变量,用于存储每一帧图像
while (true) { //无限循环
cap.read(img); //从视频文件中读取一帧图像,并存储到img变量中
imshow("Image", img); //显示图像,第一个参数是窗口的名称,第二个参数是图像变量
waitKey(1); //等待用户按键,参数是等待的毫秒数,1表示等待1毫秒
}
return 0; //返回0,表示程序正常结束
}
virtual bool cv::VideoCapture::read(OutputArray image)
从视频文件中读取一帧图像,并存储到img变量中
3.读取摄像头
#include <opencv2/imgcodecs.hpp> //包含opencv库的头文件,用于图像编码和解码
#include <opencv2/highgui.hpp> //包含opencv库的头文件,用于图像显示和交互
#include <opencv2/imgproc.hpp> //包含opencv库的头文件,用于图像处理
#include <iostream> //包含标准库的头文件,用于输入输出流
using namespace cv; //使用cv命名空间,简化代码
using namespace std; //使用std命名空间,简化代码
int main() //主函数
{
string path = "D:\\software\\opencv\\opencv\\sources\\samples\\data\\vtest.avi"; //定义一个字符串变量,存储视频文件的路径
VideoCapture cap(0); //定义一个VideoCapture类型的变量,用于调用摄像头
Mat img; //定义一个Mat类型的变量,用于存储每一帧图像
while (true) { //无限循环
cap.read(img); //从视频文件中读取一帧图像,并存储到img变量中
imshow("Image", img); //显示图像,第一个参数是窗口的名称,第二个参数是图像变量
waitKey(1); //等待用户按键,参数是等待的毫秒数,1表示等待1毫秒
}
return 0; //返回0,表示程序正常结束
}
跟上面是一样的,只不过是将cap的参数换成了0,设备引索,笔记本的摄像头就是0。
二、基础函数
1.图像操作
#include <opencv2/imgcodecs.hpp> //包含opencv库的头文件,用于图像编码和解码
#include <opencv2/highgui.hpp> //包含opencv库的头文件,用于图像显示和交互
#include <opencv2/imgproc.hpp> //包含opencv库的头文件,用于图像处理
#include <iostream> //包含标准库的头文件,用于输入输出流
using namespace cv; //使用cv命名空间,简化代码
using namespace std; //使用std命名空间,简化代码
int main() //主函数
{
string path = "D:\\popo\\test.png"; //定义一个字符串变量,存储图像的路径
Mat img = imread(path); //定义一个Mat类型的变量,用于存储读取的图像
Mat imgGray, imgBlur, imgCanny, imgDil, imgErode; //定义一些Mat类型的变量,用于存储处理后的图像
cvtColor(img, imgGray, COLOR_BGR2GRAY); //将原始图像转换为灰度图像,第一个参数是输入图像,第二个参数是输出图像,第三个参数是转换类型
GaussianBlur(img, imgBlur, Size(3, 3), 3, 0); //对原始图像进行高斯模糊,第一个参数是输入图像,第二个参数是输出图像,第三个参数是模糊核的大小,第四个参数是水平方向的标准差,第五个参数是垂直方向的标准差
Canny(imgBlur, imgCanny, 25, 75); //对模糊后的图像进行边缘检测,第一个参数是输入图像,第二个参数是输出图像,第三个参数是最小阈值,第四个参数是最大阈值
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); //定义一个结构元素(核),用于膨胀和腐蚀操作,第一个参数是形状类型,第二个参数是大小
dilate(imgCanny, imgDil, kernel); //对边缘检测后的图像进行膨胀操作,第一个参数是输入图像,第二个参数是输出图像,第三个参数是结构元素(核)
erode(imgDil, imgErode, kernel); //对膨胀后的图像进行腐蚀操作,第一个参数是输入图像,第二个参数是输出图像,第三个参数是结构元素(核)
imshow("Image", img); //显示原始图像,第一个参数是窗口的名称,第二个参数是图像变量
imshow("ImageGray", imgGray); //显示灰度图像
imshow("ImageBlur", imgBlur); //显示模糊后的图像
imshow("ImageCanny", imgCanny); //显示边缘检测后的图像
imshow("ImageDilation", imgDil); //显示膨胀后的图像
imshow("ImageErode", imgErode); //显示腐蚀后的图像
waitKey(0); //等待用户按键,参数是等待的毫秒数,0表示无限等待
return 0; //返回0,表示程序正常结束
}