【opencv】2.图像读取、显示、输出

看得见的东西往往使我们更有兴致,从看得见的开始学


【一】头文件和名字空间


你可以直接包含整个opencv的所有文件,也可以按需包含各个模块文件,模块结构的划分可以参考博文:opencv模块结构划分,这个以后可以慢慢了解,现在我们暂时包含整个opencv的所有文件吧。opencv的使用了独立的名字空间cv。代码如下:

#include <opencv2/opencv.hpp>
using namespace cv;

【二】图片读取


读取函数是imread()
函数原型:

Mat imread(const string& filename,intflags=1 );

输入:参数1为图像路径和图片名,参数2为图像颜色类型
输出:一个mat,这是一个表示图像的类。
附:–>opencv支持的图片类型为有如下几种

Windows位图 - .bmp, .dib
JPEG文件 - .jpeg, .jpg, .jpe
JPEG 2000文件- .jp2
PNG图片 - .png
Sun rasters光栅文件 - .sr, .ras
TIFF 文件 - .tiff, .tif

–>参数2取值:

CV_LOAD_IMAGE_UNCHANGED-,这个标识在新版本中被废置了,忽略。
CV_LOAD_IMAGE_ANYDEPTH- 如果取这个标识的话,若载入的图像的深度为16 位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
CV_LOAD_IMAGE_COLOR- 如果取这个标识的话,总是转换图像到彩色一体
CV_LOAD_IMAGE_GRAYSCALE- 如果取这个标识的话,始终将图像转换成灰度1


【三】图像显示


1.在显示图像之前,需要创建一个容纳图像的窗口,使用namedWindow()函数来创建窗口
函数原型:

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

输入:
参数1为窗口名,也是窗口id,是窗口的唯一标识
参数2为窗口类型
附:
窗口类型

WINDOW_NORMAL:设置了这个值,用户便可以改变窗口的大小(没有限制)
WINDOW_AUTOSIZE:如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
WINDOW_OPENGL: 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

2.图片显示函数imshow()
函数原型:

void imshow(const string& winname, InputArray mat);

输入:
参数1为窗口标识,输入之前创建的窗口名即可
参数2为要显示的图片(这里的InputArray将其简单看成一个mat类就行)


【四】图片输出


很多时候我们需要将处理之后的图片输出到文件中,可以使用imwrite()函数
函数原型:

bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() ); 

输入:
参数1为文件名,其中可以包含文件路径,输出格式有文件扩展名决定,固需要加上文件扩展名
参数2为需要输出的图片,输入对应mat即可
参数3表示为特定格式保存的参数编码,主要是图片质量或压缩比之类的参数,一般可以缺省,见附。
输出:
是否输出成功的bool值。
附:

对于JPEG格式的图片,这个参数表示从0到100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95.
对于PNG格式的图片,这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0到9。较高的值意味着更小的尺寸和更长的压缩时间,而默认值是3。
对于PPM,PGM,或PBM格式的图片,这个参数表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,而默认值是1。

【五】一个综合的实例

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;
int main(){
    const char* path = "F:/test.jpg";
    //从文件中读入图像
    Mat img = imread(path);
    //如果读入图像失败
    if (img.empty()){
        fprintf(stderr, "Can not load image %s\n", path);
        return -1;
    }
    //显示图像
    imshow("image", img);
    //输出文件
    imwrite("F:/output.jpg", img);
    //此函数等待按键,按键盘任意键就返回
    waitKey();
    return 0;
}

显示:
这里写图片描述

输出文件:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值