基于opencv的c++图像处理(图像读取、显示以及保存)

  • Post author:
  • Post category:其他




前言

基于opencv的c++接口,图像读取、显示以及保存的示例



相关的opencv接口解析

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );

函数 imread 从指定文件加载图像并返回。如果图像不能读取(因为文件丢失、权限不正确、格式不支持或无效),函数返回一个空矩阵( Mat::data==NULL )。

目前,支持以下文件格式:

  • Windows 位图 – *.bmp、*.dib
  • JPEG 文件 – *.jpeg、*.jpg、*.jpe
  • JPEG 2000 文件 – *.jp2
  • 便携式网络图形 – *.png
  • WebP – *.webp
  • 便携式图像格式 – *.pbm、*.pgm、*.ppm *.pxm、*.pnm
  • PFM 文件 – *.pfm
  • 太阳栅格 – *.sr、*.ras
  • TIFF 文件 – *.tiff、*.tif
  • OpenEXR 图像文件 – *.exr
  • Radiance HDR – *.hdr、*.pic
  • GDAL 支持的栅格和矢量地理空间数据


@param filename 要加载的文件名。

@param flags 可以采用 cv::ImreadModes 值的标志


flags常用标识:

IMREAD_GRAYSCALE = 0, // 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。

IMREAD_COLOR = 1, // 如果设置,则始终将图像转换为 3 通道 BGR 彩色图像。

CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

namedWindow 函数创建一个窗口,可以用作图像和轨迹栏的占位符。 创建的窗口由它们的名称引用。

如果已存在同名窗口,则该函数不执行任何操作。

您可以调用 cv::destroyWindow 或 cv::destroyAllWindows 来关闭窗口并取消分配任何相关的内存使用。 对于一个简单的程序,您实际上不必调用这些函数,因为退出时操作系统会自动关闭应用程序的资源和窗口。


@param winname 窗口标题中的窗口名称,可用作窗口标识符。

@param flags 窗口的标志。 支持的标志是:(cv::WindowFlags)


flags常用标识:

WINDOW_NORMAL = 0, //用户可以调整窗口大小(无约束)/也用于将全屏窗口切换到正常大小。

WINDOW_AUTOSIZE = 1, //用户无法调整窗口大小,大小受显示图像的限制。

CV_EXPORTS_W void imshow(const String& winname, InputArray mat);

函数 imshow 在指定的窗口中显示图像。 如果窗口是使用 cv::WINDOW_AUTOSIZE 标志创建的,则图像以其原始大小显示,但仍受屏幕分辨率的限制。否则,将缩放图像以适合窗口。 该函数可以缩放图像,具体取决于其深度:

  • 如果图像是 8 位无符号的,则按原样显示。
  • 如果图像是 16 位无符号或 32 位整数,则像素除以 256。即,

    值范围 [0,255*256] 映射到 [0,255]。
  • 如果图像是 32 位或 64 位浮点,则像素值乘以 255。即

    值范围 [0,1] 映射到 [0,255]。


    @param winname 窗口的名称。

    @param mat 要显示的图像。
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());

函数 imwrite 将图像保存到指定文件。图像格式是根据文件扩展名选择的(有关扩展名列表,请参阅 cv::imread)。通常,使用此功能只能保存 8 位单通道或 3 通道(具有“BGR”通道顺序)图像,但以下情况除外:

  • 16 位无符号 (CV_16U) 图像可以保存为 PNG、JPEG 2000 和 TIFF 格式
  • 32 位浮点 (CV_32F) 图像可以保存为 PFM、TIFF、OpenEXR 和 Radiance HDR 格式;

    3 通道 (CV_32FC3) TIFF 图像将使用 LogLuv 高动态范围编码(每像素 4 字节)保存
  • 使用此功能可以保存带有 alpha 通道的 PNG 图像。为此,请创建 8 位(或 16 位)4 通道图像 BGRA,Alpha 通道位于最后。完全透明的像素应该将 alpha 设置为 0,完全不透明的像素应该将 alpha 设置为 255/65535。
  • 可以以 TIFF 格式保存多个图像(Mat 的矢量。


    @param filename 文件的名称。

    @param img(Mat 或 Mat 的向量)要保存的一个或多个图像。

    @param params 格式特定的参数编码为对(paramId_1,paramValue_1,paramId_2,paramValue_2,…)见 cv::ImwriteFlags
CV_EXPORTS_W int waitKey(int delay = 0);

函数 waitKey 无限等待键事件或延迟毫秒,当它为正时。 由于操作系统在切换线程之间有最短时间,因此该函数不会完全等待延迟毫秒,它会等待至少延迟毫秒,具体取决于当时您计算机上正在运行的其他内容。 如果在指定的时间过去之前没有按下任何键,则返回被按下键的代码或 -1。


@param delay 以毫秒为单位的延迟。 0 是表示“永远”的特殊值。



示例代码

#include <iostream>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
#define PROCESS_IMG_SUCESS 0
#define PROCESS_IMG_FAIL 1
int main()
{
	// 读取源图像及判断
	cv::Mat srcImage = cv::imread("flower.jpg", IMREAD_COLOR);
	if (!srcImage.data)
	{
		return 1;
	}
	//创建显示窗口
	cv::namedWindow("源图像", WINDOW_AUTOSIZE);
	//显示图像
	cv::imshow("源图像", srcImage);
	//保存图像
	cv::imwrite("save.jpg", srcImage);
	cv::waitKey(0);
	return 0;
}



版权声明:本文为qq_40118285原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。