一、实验目的

  1. 了解机器视觉的基本概念和原理。
  2. 掌握 OpenCV 的基本使用方法。
  3. 完成一些基本的图像处理任务。

二、实验原理

  1. 机器视觉的基本概念

机器视觉是指利用计算机和图像处理技术,对图像进行处理和分析,从而实现对场景的理解和认知,以达到自动控制、自动检测和自动识别等目的的一种技术。机器视觉的主要应用领域包括工业自动化、无人驾驶、安防监控等。

  1. OpenCV 的基本使用方法

OpenCV 是一个开源的计算机视觉库,它提供了很多图像处理和计算机视觉的函数和工具。OpenCV 支持多种编程语言,如 C++、Python 等。在本次实验中,我们主要使用 C++ 编写 OpenCV 程序。

OpenCV 的基本使用步骤如下:

(1) 导入 OpenCV 库:在程序中添加 OpenCV 头文件和库文件。 (2) 创建图像对象:使用 cv::Mat 类创建图像对象。 (3) 读取和展示图像:使用 cv::imread 函数读取图像,使用 cv::imshow 函数显示图像。 (4) 图像处理:使用 OpenCV 提供的函数进行图像处理。 (5) 保存图像:使用 cv::imwrite 函数将处理后的图像保存到本地。

三、实验内容

  1. 读取和展示图像

首先,我们需要读取一张图像并展示出来。代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread('test.jpg');
    imshow('image', img);
    waitKey(0);
    return 0;
}

解释:

(1) 第一行导入 OpenCV 库。 (2) 第五行使用 cv::imread 函数读取名为 'test.jpg' 的图像。 (3) 第六行使用 cv::imshow 函数展示读取到的图像。 (4) 第七行使用 cv::waitKey 函数等待键盘输入,使图像保持显示状态。 (5) 第八行返回 0,程序结束。

  1. 图像灰度化

图像灰度化是指将彩色图像转换为灰度图像。灰度图像每个像素只有一个灰度值,可以用一个 8 位整数表示。图像灰度化可以减少图像的复杂度,方便后续处理。

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread('test.jpg');
    Mat gray;
    cvtColor(img, gray, COLOR_BGR2GRAY);
    imshow('image', gray);
    waitKey(0);
    return 0;
}

解释:

(1) 第一行导入 OpenCV 库。 (2) 第五行使用 cv::imread 函数读取名为 'test.jpg' 的图像。 (3) 第六行使用 cv::Mat 类创建一个名为 gray 的空白图像。 (4) 第七行使用 cv::cvtColor 函数将彩色图像转换为灰度图像。 (5) 第八行使用 cv::imshow 函数展示灰度图像。 (6) 第九行使用 cv::waitKey 函数等待键盘输入,使图像保持显示状态。 (7) 第十行返回 0,程序结束。

  1. 图像二值化

图像二值化是指将灰度图像转换为黑白二值图像。在二值图像中,每个像素只有两个值:0 和 255,分别代表黑色和白色。图像二值化可以将图像中不必要的信息去掉,保留目标物体的形状和轮廓。

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread('test.jpg');
    Mat gray, binary;
    cvtColor(img, gray, COLOR_BGR2GRAY);
    threshold(gray, binary, 128, 255, THRESH_BINARY);
    imshow('image', binary);
    waitKey(0);
    return 0;
}

解释:

(1) 第一行导入 OpenCV 库。 (2) 第五行使用 cv::imread 函数读取名为 'test.jpg' 的图像。 (3) 第六行使用 cv::Mat 类创建一个名为 gray 的空白图像。 (4) 第七行使用 cv::cvtColor 函数将彩色图像转换为灰度图像。 (5) 第八行使用 cv::threshold 函数将灰度图像进行二值化。 (6) 第九行使用 cv::imshow 函数展示二值图像。 (7) 第十行使用 cv::waitKey 函数等待键盘输入,使图像保持显示状态。 (8) 第十一行返回 0,程序结束。

  1. 图像平滑

图像平滑是指通过滤波器对图像进行模糊化处理,达到去噪和平滑的效果。常用的滤波器包括均值滤波器、中值滤波器和高斯滤波器等。

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread('test.jpg');
    Mat blur;
    GaussianBlur(img, blur, Size(5, 5), 0);
    imshow('image', blur);
    waitKey(0);
    return 0;
}

解释:

(1) 第一行导入 OpenCV 库。 (2) 第五行使用 cv::imread 函数读取名为 'test.jpg' 的图像。 (3) 第六行使用 cv::Mat 类创建一个名为 blur 的空白图像。 (4) 第七行使用 cv::GaussianBlur 函数对图像进行高斯平滑。 (5) 第八行使用 cv::imshow 函数展示平滑后的图像。 (6) 第九行使用 cv::waitKey 函数等待键盘输入,使图像保持显示状态。 (7) 第十行返回 0,程序结束。

  1. 图像轮廓检测

图像轮廓检测是指在图像中寻找物体的边缘。常用的轮廓检测算法包括 Canny 算法和 Sobel 算法等。

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread('test.jpg');
    Mat gray, edges;
    cvtColor(img, gray, COLOR_BGR2GRAY);
    Canny(gray, edges, 100, 200);
    imshow('image', edges);
    waitKey(0);
    return 0;
}

解释:

(1) 第一行导入 OpenCV 库。 (2) 第五行使用 cv::imread 函数读取名为 'test.jpg' 的图像。 (3) 第六行使用 cv::Mat 类创建一个名为 gray 的空白图像。 (4) 第七行使用 cv::cvtColor 函数将彩色图像转换为灰度图像。 (5) 第八行使用 cv::Canny 函数对灰度图像进行轮廓检测。 (6) 第九行使用 cv::imshow 函数展示检测到的轮廓。 (7) 第十行使用 cv::waitKey 函数等待键盘输入,使图像保持显示状态。 (8) 第十一行返回 0,程序结束。

四、实验总结

本次实验主要介绍了机器视觉和 OpenCV 的基本原理和使用方法,并完成了一些基本的图像处理任务。通过本次实验,我对机器视觉和 OpenCV 有了更深入的了解,掌握了一些常用的图像处理方法,为以后的学习和实践打下了基础。

OpenCV 机器视觉入门实验报告:图像处理基础

原文地址: https://www.cveoy.top/t/topic/nYUT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录