前言
在学习 OpenCV 的过程中,首先需要掌握如何读取(imread
)、展示(imshow)和保存(imwrite
)图像,这些基本操作是所有图像处理任务的基础。无论是对图像进行滤波、变换、特征提取,还是进行更高级的计算机视觉任务,图像的读取与保存都是不可或缺的第一步。在这篇博客中,我们将详细讲解如何使用 OpenCV 在 C++ 中进行图像的读取、加载和保存操作,并提供完整的代码示例,帮助初学者打下扎实的基础。通过理解并掌握这些基础技能,你将为后续的图像处理和分析工作做好充分的准备。
1.图像读取(cv::imread)
使用的图像链接:实验使用的图像下载链接
图像的读取通常通过 cv::imread
函数来实现。imread
函数可以从指定的文件路径中加载图像,并将其存储在 cv::Mat
对象中。判定图像是否能找到,如果图像没找到则返回-1。
cv::Mat image = cv::imread("sherlock.jpg");
if (image.empty()) {
std::cerr << "Could not find or open the image" << std::endl;
return -1;
}
(1)相对路径
读取本项目路径下的图片
cv::Mat image = cv::imread("sherlock.jpg");
(2)绝对路径
读取其他文件夹中的图片,注意是“/”。
cv::Mat image = cv::imread("E:/opencv/sherlock.jpg");
2.图像展示(cv::imshow)
namedWindow
创建一个窗口用于显示图像。窗口的名称为 "input image"
。cv::WINDOW_AUTOSIZE
:确保窗口大小与显示的图像尺寸匹配,不会自动调整窗口大小。这样,图像会以其原始尺寸显示,不会因窗口调整而缩放或变形。
waitKey(0);确保图像窗口在显示时不会立即关闭,给出时间查看图像。如果代码正确,也能读取图像但是不能显示出图像,就是这个问题,图像会一闪而过,感觉图像没有显示。
namedWindow("input image", cv::WINDOW_AUTOSIZE);
cv::imshow("input image", image);
waitKey(0);
3.图像保存(cv::imwrite)
imwrite
函数用于将 cv::Mat
对象保存为图像文件。第一个参数是保存路径,第二个参数是要保存的 Mat
对象。保存路径也可以使用绝对路径保存到指定文件夹中
cv::imwrite("output.jpg", image);
完整代码
#include<opencv2/opencv.hpp>
#include<highgui.hpp>
using namespace cv;
using namespace std;
void imread_show_imwrite()
{
/*******************图像读取********************/
//cv::Mat image = cv::imread("sherlock.jpg"); // 读取本项目路径下的图片
cv::Mat image = cv::imread("E:/opencvdemo/opencv/sherlock.jpg"); //读取其他文件夹中的图片
if (image.empty()) {
std::cerr << "Could not find or open the image" << std::endl;
return;
}
/*******************图像展示********************/
namedWindow("input image", cv::WINDOW_AUTOSIZE);
cv::imshow("input image", image);
waitKey(0);
/*******************图像保存********************/
cv::imwrite("output.jpg", image);
}
int main()
{
imread_show_imwrite();
return 0;
}