快速上手OpenCV图像处理

本文介绍了使用OpenCV进行图像处理的基本方法,包括图像读取与显示、图像腐蚀、图像模糊及边缘检测等关键技术,并展示了如何读取摄像头和视频。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像读取和显示

OpenCV中通过imread函数读取图片,读取的图片通过Mat类接收,通过imshow函数显示图片。

#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //读取图片
    Mat Img = imread("1.jpg");

    //显示图片
    imshow("显示图片", Img);

    //图像显示1000毫秒后关闭(当waitKey参数为0时,一直显示图片直到用户按下按键)
    waitKey(1000);

    return 0;
}

这里写图片描述

图像腐蚀

利用图像的暗色部分腐蚀掉图像的高亮部分

#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //读取图片
    Mat srcImage = imread("2.jpg");

    //显示原图
    imshow("显示原图", srcImage);

    //腐蚀操作
    Mat element = getStructuringElement(MORPH_RECT, Size(9, 9));  //定义腐蚀结构
    Mat dstImage;
    erode(srcImage, dstImage, element);  //腐蚀结果保存在dstImage中

    //显示腐蚀效果
    imshow("腐蚀效果", dstImage);

    waitKey(0);
    return 0;
}

这里写图片描述

图像模糊

#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //读取图片
    Mat srcImage = imread("C:\\Users\\Simple\\Desktop\\3.jpg");

    //显示原图
    imshow("显示原图", srcImage);

    //模糊操作
    Mat dstImage;
    blur(srcImage, dstImage, Size(7, 7));  //blur为滤波操作,滤波的效果就是模糊,模糊的结果保存在dstImage

    //显示模糊效果
    imshow("模糊效果", dstImage);

    waitKey(0);
    return 0;
}

这里写图片描述

边缘检测

#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //读取图片
    Mat srcImage = imread("4.jpg");

    //显示原图
    imshow("显示原图", srcImage);

    //边缘检测
    Mat dstImage;
    Canny(srcImage, dstImage, 150, 180, 3);  //将检测到的边缘保存在dstImage

    //显示边缘检测效果
    imshow("边缘检测", dstImage);

    waitKey(0);
    return 0;
}

这里写图片描述

读取摄像头和视频

读取摄像头和读取视频本质上没有区别,因为视频就是摄像头录下的一帧一帧的图片。

#include <iostream>
#include <opencv.hpp>
#include <string>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //////////////////////////////////////////////////////////////////////////
    //读取视频
    string video_name("1.avi");
    VideoCapture capture(video_name);

    //循环显示每一帧
    while (1)
    {
        Mat frame;  //用于存储每一帧
        capture >> frame;  //读取一帧

        //若视频播放完,退出
        if(frame.empty())
            break;
        imshow("读取视频", frame);
        waitKey(30);  //延时30ms
    }

    //////////////////////////////////////////////////////////////////////////
    //读取摄像头
    //VideoCapture capture;
    //int camera_id = 0;  //定义摄像头编号,一般从0开始编号
    //capture.open(camera_id);  //打开摄像头
    //while (1)
    //{
    //  Mat frame;  //用于存储每一帧
    //  capture >> frame;  //读取一帧
    //  imshow("读取摄像头", frame);
    //  waitKey(30);  //延时30ms
    //}

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值