前言
基于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;
}