opencv


一、基本操作

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,表示程序正常结束
}

文章作者: zhang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhang !
  目录