目录
一、OpenCV 读取图像
OpenCV 读取函数
参数:
二、OpenCV 显示图像
imshow函数
imshow函数功能
imshow函数原型
三、OpenCV 保存图像
四、结果和代码
一、OpenCV 读取图像
OpenCV 允许我们对图像执行多种操作,但要做到这一点,需要读取一个图像文件作为输入,然后我们可以对其执行各种操作。OpenCV 提供了以下用于读取和写入图像的函数。
OpenCV 读取函数
imread() 函数从指定文件加载图像并返回。语法是:
cv2.imread(filename[,flag])
参数:
filename:要加载的文件名
flag:该标志指定加载图像的颜色类型:
IMREAD_UNCHANGED = -1, //!<如果设置,返回加载的图像是(alpha通道,否则它将被裁剪)。忽略EXIF方 IMREAD_GRAYSCALE = 0, //!<如果设置,始终将图像转换为单通道灰度图像(编解码器内部转换)。 IMREAD_COLOR = 1, //!<如果设置,总是将图像转换为3通道BGR彩色图像。 IMREAD_ANYDEPTH = 2, //!<如果设置,当输入有相应深度时返回16位/32位图像,否则转换为8位图像。 IMREAD_ANYCOLOR = 4, //!<如果设置,图像将以任何可能的颜色格式读取。 IMREAD_LOAD_GDAL = 8, //!<如果设置,使用gdal驱动程序加载图像。 IMREAD_REDUCED_GRAYSCALE_2 = 16, //!<如果设置,始终将图像转换为单通道灰度图像,图像大小减小1/2。 IMREAD_REDUCED_COLOR_2 = 17, //!<如果设置,总是将图像转换为3通道BGR彩色图像,图像大小减小1/2。 IMREAD_REDUCED_GRAYSCALE_4 = 32, //!<如果设置,始终将图像转换为单通道灰度图像,图像大小减小1/4。 IMREAD_REDUCED_COLOR_4 = 33, //!<如果设置,总是将图像转换为3通道BGR彩色图像,图像大小减小1/4。 IMREAD_REDUCED_GRAYSCALE_8 = 64, //!<如果设置,始终将图像转换为单通道灰度图像,图像大小减小1/8。 IMREAD_REDUCED_COLOR_8 = 65, //!<如果设置,总是将图像转换为3通道BGR彩色图像,图像大小减小1/8。 IMREAD_IGNORE_ORIENTATION = 128 //!<如果设置了,不要根据EXIF的方向标志旋转图像。
如果由于不支持的文件格式、缺少文件、不支持或无效格式而无法读取图像,则imread()函数返回一个矩阵。目前,支持以下文件格式。
窗口位图- *.bmp, *.dib
JPEG 文件- *.jpeg, *.jpg, *.jpe
便携式网络图形- *.png
便携式图像格式- *.pbm, *.pgm, *.ppm
TIFF 文件- * .tiff, *.tif
注意:彩色图像、解码图像的通道将按 BGR 顺序存储。
二、OpenCV 显示图像
imshow函数
imshow函数功能
imshow的函数功能也非常简单,名称也可以看出来,image show的缩写。imshow负责的就是将图片显示在窗口中,通过设备屏幕展现出来。
imshow函数原型
CV_EXPORTS void imshow(const String& winname, const ogl::Texture2D& tex);
参数:
- 没有返回值
- 参数1, 显示的窗口名,可以使用cv::namedWindow函数创建窗口,如不创建,imshow函数将自动创建
- 需要显示的图像
三、OpenCV 保存图像
OpenCV imwrite()函数用于将图像保存到指定文件。文件扩展名定义图像格式。语法如下:
函数原型:
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
const std::vector<int>& params = std::vector<int>());
函数参数:
- filename:需要保存图像的文件名,要保存图片为哪种格式,就带什么后缀。
- img:要保存的图像。
- params:表示为特定格式保存的参数编码。
IMWRITE_JPEG_QUALITY //!对于JPEG,它的质量可以从0到100(越高越好)。缺省值为95。 IMWRITE_JPEG_PROGRESSIVE //!<启用JPEG特征,0或1,默认为False。 IMWRITE_JPEG_OPTIMIZE //!<启用JPEG特征,0或1,默认为False。 IMWRITE_JPEG_RST_INTERVAL //!< JPEG重启间隔,0 - 65535,默认为0 -不重启。 IMWRITE_JPEG_LUMA_QUALITY //!<单独的亮度质量等级,0 - 100,默认为0 -不使用。 IMWRITE_JPEG_CHROMA_QUALIT //!<分离色度质量等级,0 - 100,默认为0 -不使用。 IMWRITE_PNG_COMPRESSION //!<对于PNG,它可以是0到9之间的压缩级别。数值越高,压缩时间越长,大小越小。如果指定,strategy将更改为IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY)。默认值为1(最佳速度设置)。 IMWRITE_PNG_STRATEGY //!< cv::ImwritePNGFlags之一,默认为IMWRITE_PNG_STRATEGY_RLE。 IMWRITE_PNG_BILEVEL //!<二进制级别PNG, 0或1,默认为0。 IMWRITE_PXM_BINARY //!<对于PPM, PGM或PBM,它可以是二进制格式标志,0或1。缺省值为1。 IMWRITE_EXR_TYPE //!< override EXR存储类型(默认为FLOAT (FP32)) IMWRITE_EXR_COMPRESSION //!< override EXR压缩类型(ZIP_COMPRESSION = 3是默认值) IMWRITE_WEBP_QUALITY //!对于WEBP,它的质量可以从1到100(越高越好)。默认情况下(没有任何参数),如果质量高于100,则使用无损压缩。 IMWRITE_PAM_TUPLETYPE //!<对于PAM,将TUPLETYPE字段设置为为该格式定义的相应字符串值 IMWRITE_TIFF_RESUNIT //!<对于TIFF,用于指定要设置的DPI分辨率单位;有关有效值,请参阅libtiff文档 IMWRITE_TIFF_XDPI //!<对于TIFF,用于指定X方向DPI IMWRITE_TIFF_YDPI //!<对于TIFF,用于指定Y方向DPI IMWRITE_TIFF_COMPRESSION //!<对于TIFF,用于指定图像压缩方案。有关压缩格式对应的整数常量,请参阅libtiff。注意,对于深度为CV_32F的图像,只使用libtiff的SGILOG压缩方案。对于其他支持的深度,压缩方案可以通过该标志指定;LZW压缩是默认的。 IMWRITE_JPEG2000_COMPRESSION_X1000 //!<对于JPEG2000,用于指定目标压缩率(乘以1000)。取值范围为0 ~ 1000。缺省值为1000。
返回值:如果imwrite() 函数返回 True,则表示文件成功写入指定文件。
注意:
imwrite函数是基于文件扩展名选择图像的格式。通常,使用此功能只能保存8位单通道或3通道(带有BGR通道顺序)图像,但有以下例外:
对于PNG,JPEG2000和TIFF格式,可以保存16位无符号(CV_16U)图像。
32位浮点(CV_32F)图像可以保存为PFM,TIFF,OpenEXR和Radiance HDR格式; 使用LogLuv高动态范围编码(每像素4个字节)保存3通道(CV_32FC3)TIFF图像
可以使用此功能保存带有Alpha通道的PNG图像。为此,创建8位(或16位)4通道图像BGRA,其中alpha通道最后。完全透明的像素应该将alpha设置为0,完全不透明的像素应该将alpha设置为255/65535。
如果格式,深度或通道顺序不同,请在保存之前使用Mat :: convertTo和cv :: cvtColor进行转换。或者,使用通用FileStorage I / O函数将图像保存为XML或YAML格式。
四、结果和代码
代码:
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
Mat img=cv::imread("E:/1WT/18.OCR/1.Demo/OCRtest/test.bmp");
imshow("Image", img);
imwrite("save.jpg",img);
qDebug()<<"1243";
}
结果: