OpenCV读写图像文件解析

imdecode

从内存中的缓冲区读取图像。

C++: Mat imdecode(InputArray buf, int flags)

C++: Mat imdecode(InputArray buf, int flags, Mat* dst)

C: IplImage* cvDecodeImage(const CvMat* buf, int iscolor=CV_LOAD_IMAGE_COLOR)

C: CvMat* cvDecodeImageM(const CvMat* buf, int iscolor=CV_LOAD_IMAGE_COLOR)

Python: cv2.imdecode(buf, flags) → retval

Parameters:

· buf – Input array or vector of bytes.
· flags – The same flags as in imread() .
· dst – The optional output placeholder for the decoded matrix. It can save the image reallocations when the function is called repeatedly for images of the same size.

参数:

buf–输入字节数组或向量。

flags–与imread()中的标志相同。

dst–解码矩阵的可选输出占位符。当对相同大小的图像重复调用该函数时,它可以保存图像重新分配。

函数从内存中指定的缓冲区读取图像。如果缓冲区太短或包含无效数据,则返回空矩阵/图像。

有关支持的格式和标志说明的列表,请参见imread()。

注:在彩色图像中,解码图像将以B G R顺序存储信道。

Imencode

将图像编码到内存缓冲区中。

C++: bool imencode(const string& ext, InputArray img, vector& buf, const vector& params=vector())

C: CvMat* cvEncodeImage(const char* ext, const CvArr* image, const int* params=0 )

Python: cv2.imencode(ext, img[, params]) → retval, buf

Parameters:

· ext – File extension that defines the output format.
· img – Image to be written.
· buf – Output buffer resized to fit the compressed image.
· params – Format-specific parameters. See imwrite()

参数:

ext–定义输出格式的文件扩展名。

img–待写图像。

buf–调整输出缓冲区大小以适应压缩图像。

params–格式化特定参数。请参见imwrite()。

函数压缩图像并将其存储在内存缓冲区中,该缓冲区的大小将根据结果调整。有关支持的格式和标志说明的列表,请参见imwrite()。

注意:cvEncodeImage返回CV_8UC1类型的单行矩阵,其中包含作为字节数组的编码图像。

Imread

从文件加载图像。

C++: Mat imread(const string& filename, int flags=1 )

Python: cv2.imread(filename[, flags]) → retval

C: IplImage* cvLoadImage(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR )

C: CvMat* cvLoadImageM(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR )

Python: cv.LoadImage(filename, iscolor=CV_LOAD_IMAGE_COLOR) → None

Python: cv.LoadImageM(filename, iscolor=CV_LOAD_IMAGE_COLOR) → None

Parameters:

· filename – Name of file to be loaded.
· flags – Flags specifying the color type of loaded image
CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit
image when the input has the corresponding depth, otherwise convert it to 8-bit.
CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one

0 Return a 3-channel color image.
=0 Return a grayscale image.
<0 Return the loaded image as is (with alpha channel).

参数:

•file Name–要加载的文件的名称。

•flags–指定加载图像颜色类型的标志:

CV_LOAD_IMAGE_ANYDEPTH-如果已设置,则在输入具有相应深度时返回16位/32位图像,否则将其转换为8位。 CV_LOAD_IMAGE_COLOR-如果设置,请始终将图像转换为彩色图像
CV_LOAD_IMAGE_GRAYSCALE-如果设置,始终将图像转换为灰度图像

0返回3通道彩色图像。

注意,在当前实现中,alpha通道(如果有)从输出图像中剥离。如果需要alpha通道,请使用负值。

=0返回灰度图像。

<0按原样返回加载的图像(使用alpha通道)。

函数imread从指定文件加载图像并返回它。如果无法读取图像(由于缺少文件、权限不正确、格式不受支持或无效),函数将返回空矩阵(Mat::data==NULL)。目前,支持以下文件格式:

Windows bitmaps - *.bmp, *.dib (always supported)
JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
JPEG 2000 files - *.jp2 (see the Notes section)
Portable Network Graphics - *.png (see the Notes section)
Portable image format - *.pbm, *.pgm, *.ppm (always supported)
Sun rasters - *.sr, *.ras (always supported)
TIFF files - *.tiff, *.tif (see the Notes section)

注意

函数根据内容而不是文件扩展名来确定图像的类型。

在Microsoft WindowsOS和MacOSX上,默认情况下会使用OpenCV图像(libjpeg、libpng、libtiff和libjasper)附带的编解码器。因此,OpenCV始终可以读取jpeg、png和tiff。在MacOSX上,还可以选择使用本机MacOSX图像读取器。但请注意,由于MacOSX中嵌入了颜色管理,目前这些本地图像加载程序提供的图像具有不同的像素值。

在Linux*、BSD风格和其他类似Unix的开源操作系统上,OpenCV查找随OS映像提供的编解码器。安装相关软件包(不要忘记开发文件,例如Debian和Ubuntu中的“libjpeg dev”)以获得编解码器支持,或者在CMake中打开OPENCV_BUILD_3RDPARTY_LIBS标志。

注:在彩色图像的情况下,解码图像将以B G R顺序存储信道。

Imwrite

将图像保存到指定文件。

C++: bool imwrite(const string& filename, InputArray img, const vector& params=vector() )

Python: cv2.imwrite(filename, img[, params]) → retval

C: int cvSaveImage(const char* filename, const CvArr* image, const int* params=0 )

Python: cv.SaveImage(filename, image) → None

Parameters:

· filename – Name of the file.
· image – Image to be saved.
· params –
Format-specific save parameters encoded as pairs paramId_1, paramValue_1, paramId_2, paramValue_2, … . The following
parameters are currently supported:
For JPEG, it can be a quality ( CV_IMWRITE_JPEG_QUALITY ) from 0 to 100 (the higher is the better). Default value is 95.
For PNG, it can be the compression level ( CV_IMWRITE_PNG_COMPRESSION ) from 0 to 9.
A higher value means a smaller size and longer compression time. Default value is 3.
or PPM, PGM, or PBM, it can be a binary format flag ( CV_IMWRITE_PXM_BINARY ), 0 or 1.
Default value is 1.

参数

•file Name–文件名。

•image–要保存的图像。

•params-格式特定的存储参数编码为对paramId_1、paramValue_1、paramId_2、paramValue_2。当前支持以下参数:

对于JPEG,它可以是0到100之间的质量(CV_IMWRITE_JPEG_quality)(越高越好)。默认值为95。

对于PNG,它可以是从0到9的压缩级别(CV_IMWRITE_PNG_compression)。较高的值意味着较小的大小和较长的压缩时间。默认值为3。

对于PPM、PGM或PBM,它可以是二进制格式标志(CV_IMWRITE_PXM_binary),0或1。默认值为1。

imwrite函数将图像保存到指定的文件中。

根据文件扩展名选择图像格式(有关扩展名列表,请参见imread())。使用此功能只能保存8位(或16位无符号(CV_16U)(对于PNG、JPEG 2000和TIFF)单通道或3通道(具有“BGR”通道顺序)图像。如果格式、深度或通道顺序不同,请在保存之前使用Mat::convertor()和cvtColor()进行转换。或者,使用通用文件存储I/O函数将图像保存为XML或YAML格式。

使用此函数可以使用alpha通道存储PNG图像。

为此,创建8位(或16位)4通道图像BGRA,其中alpha通道位于最后。完全透明像素的alpha设置为0,完全不透明像素的alpha设置为255/65535。下面的示例演示如何创建这样的BGRA图像并存储到PNG文件。它还演示了如何设置自定义压缩参数。

#include

#include <stdio.h>

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

void createAlphaMat(Mat &mat)

{

CV_Assert(mat.channels() == 4);

for (int i = 0; i < mat.rows; ++i) {

for (int j = 0; j < mat.cols; ++j) {

Vec4b& bgra = mat.at(i, j);

bgra[0] = UCHAR_MAX; // Blue

bgra[1] = saturate_cast((float (mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX); // Green

bgra[2] = saturate_cast((float (mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX); // Red

bgra[3] = saturate_cast(0.5 * (bgra[1] + bgra[2])); // Alpha
}

}

}

int main(int argv, char **argc)

{

// Create mat with alpha channel

Mat mat(480, 640, CV_8UC4);

createAlphaMat(mat);

vector compression_params;

compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);

compression_params.push_back(9);

try {

imwrite(“alpha.png”, mat, compression_params);

}

catch (runtime_error& ex) {

fprintf(stderr, “Exception
converting image to PNG format: %s\n”, ex.what());

return 1;

}

fprintf(stdout, “Saved PNG
file with alpha data.\n”);

return 0;

}

OpenCV读写图像文件解析相关推荐

  1. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...

  2. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...

  3. 手机闪存速度排行_华为Mate40Pro和小米11闪存哪个强-闪存读写速度对比解析

    华为手机的闪存问题在几年前就有很多用户反应过,与最近新上线的小米11对比,华为Mate40Pro和小米11闪存哪个强?下面就来本文看看详细内容介绍吧! 据悉,华为Mate40 Pro的闪存顺序读取速度 ...

  4. Opencv 光流法解析

    KLT 什么是光流以及如何求解光流(利用最小二乘法求解) locateROI adjustROI pyrUp pyrDown Opencv 光流法解析 ```cpp /** @brief Calcul ...

  5. OpenCV 读写图像、读写像素、修改像素值(案例:图像反处理)

    文章目录 读写图像 1. `imread` 可以指定加载为灰度或者RGB图像. 2. `imwrite` 保存图像文件,类型由扩展名决定. 读写像素 读一个GRAY像素点的像素值(CV_8UC1) 读 ...

  6. OpenCV读写xml和yml文件

    有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理.一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作.那么如果遇到这样 ...

  7. HDFS读写过程解析

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...

  8. OpenCV内部函数cvFindExtrinsicCameraParams2解析(一)

    背景介绍 在opencv相机标定函数calibrateCamera中,根据标定板上特征点的3D坐标,以及对应的图像2D坐标,计算每个拍摄位置的初始位姿,以便后续的优化求解最终的内.外参数.cvFind ...

  9. python调用opencv处理视频_Python调用OpenCV读写视频

    最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法. 一.opencv读视频 python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来 ...

最新文章

  1. matlab 回音的消除,回声消除AEC - 源码下载|数值算法/人工智能|matlab例程|源代码 - 源码中国...
  2. 解决:Changes not staged for commit:
  3. 单频和混频是什么意思_科研| 谐波混频器常见电路小结
  4. SDAutoLayout 一行代码搞定自动布局
  5. myeclipse6.5集成freemaker
  6. CLion 的使用(一)
  7. linux C++ socket编程 实例
  8. 解决lenovo V470 安装win8 无法重启、关机故障
  9. B帧对视频清晰度/码率的影响
  10. 2018东北四省赛 Spell Boost DP
  11. 英文科技论文写作与学术报告2021秋期末考答案|网课期末考答案|学堂在线|清华大学管晓宏教授
  12. 科技驰援 攻坚战疫 | 用友助力武汉协和医院部署捐赠物资管理系统,保证“物尽其用”...
  13. eggjs mysql_阿里开源eggjs,eggjs+ejs+mysql 初始化项目,简单记录
  14. 大学开启大数据开发之路
  15. Linux网络管理员面试题
  16. 利用poi向word模板填充数据
  17. 2023美赛,还在等什么
  18. 解决GitHub限速问题
  19. python技术手册第二版_Python技术手册(第2版) 中文PDF
  20. Diffusion 扩散模型(DDPM)详解及torch复现

热门文章

  1. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
  2. 2022-2028年中国粘网胶行业市场深度评估及发展前景规划报告
  3. Java箭头函数,lambda函数
  4. tomcat外网映射工具
  5. Python 属性__getattribute__
  6. Docker下部署mysql
  7. PyTorch 自动微分
  8. Cookie和Session的区别与联系
  9. Android 自定义 —— View moveTo与 rMoveTo 的区别
  10. Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.