OpenCV 机器视觉入门实验报告:图像处理基础
一、实验目的
- 了解机器视觉的基本概念和原理。
- 掌握 OpenCV 的基本使用方法。
- 完成一些基本的图像处理任务。
二、实验原理
- 机器视觉的基本概念
机器视觉是指利用计算机和图像处理技术,对图像进行处理和分析,从而实现对场景的理解和认知,以达到自动控制、自动检测和自动识别等目的的一种技术。机器视觉的主要应用领域包括工业自动化、无人驾驶、安防监控等。
- OpenCV 的基本使用方法
OpenCV 是一个开源的计算机视觉库,它提供了很多图像处理和计算机视觉的函数和工具。OpenCV 支持多种编程语言,如 C++、Python 等。在本次实验中,我们主要使用 C++ 编写 OpenCV 程序。
OpenCV 的基本使用步骤如下:
(1) 导入 OpenCV 库:在程序中添加 OpenCV 头文件和库文件。 (2) 创建图像对象:使用 cv::Mat 类创建图像对象。 (3) 读取和展示图像:使用 cv::imread 函数读取图像,使用 cv::imshow 函数显示图像。 (4) 图像处理:使用 OpenCV 提供的函数进行图像处理。 (5) 保存图像:使用 cv::imwrite 函数将处理后的图像保存到本地。
三、实验内容
- 读取和展示图像
首先,我们需要读取一张图像并展示出来。代码如下:
#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,程序结束。
- 图像灰度化
图像灰度化是指将彩色图像转换为灰度图像。灰度图像每个像素只有一个灰度值,可以用一个 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,程序结束。
- 图像二值化
图像二值化是指将灰度图像转换为黑白二值图像。在二值图像中,每个像素只有两个值: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,程序结束。
- 图像平滑
图像平滑是指通过滤波器对图像进行模糊化处理,达到去噪和平滑的效果。常用的滤波器包括均值滤波器、中值滤波器和高斯滤波器等。
代码如下:
#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,程序结束。
- 图像轮廓检测
图像轮廓检测是指在图像中寻找物体的边缘。常用的轮廓检测算法包括 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 有了更深入的了解,掌握了一些常用的图像处理方法,为以后的学习和实践打下了基础。
原文地址: https://www.cveoy.top/t/topic/nYUT 著作权归作者所有。请勿转载和采集!