opencv & qt study-(4)- 图像的载入,显示,及写入到图像文件

在(1),(2)中都有看到cv::imread,cv::namewindows,cv::imshow这三个函数,这里就来说一下这三个函数,最后再说一下cv::imwrit这个函数。

由于opencv中的C++类和函数都是定义在命名空间cv中,所以上面每个函数前面都有cv::,这样才可以访问。我们知道在C++中还有另一种访问的方式就是在代码的适当的开始处添加using namespace cv;这样在访问的时候就不需要再添加cv::了。

下面进入今天的正题了,

1. 加载一幅图像 cv::imread

函数原型:

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

参数:

         filename ---- 要加载的文件和名字

        Flags ---- 指定图像加载的类型

        >0 返回一个三通道颜色的图像

        =0 返回一个灰色图像

        <0 返回一个包含Alpha通道的图像。(if (flags > 0) 一个四通道RGBA的图像被加载,返回RGB图像,)

imread加载一个指定的图像文件并返回它。如果图像因为路径不对,权限问题,非法格式等问题出现加载失败,imread返回一个空的矩阵(Mat::data ==NULL),当前可以支持的读取的图像文件格式有:

        Windows 位图 - *.bmp, *.dib (always supported)

        JPEG 文件 - *.jpeg, *.jpg, *.jpe (see the Notes section)

        JPEG 2000 f文件 - *.jp2 (see the Notes section)

        PNG图像 - *.png (see the Notes section)

        便携文件格式 - *.pbm, *.pgm, *.ppm (always supported)

        Sun rasters 光栏文件 - *.sr, *.ras (always supported)

        TIFF 文件 - *.tiff, *.tif (see the Notes section)

2. 在窗口中显示指定的图像 imshow

函数原型: void imshow(const string& winname, InputArray image)

参数:

        winname – 窗口的名字

        Image ----- 要显示的图像

功能:

        在指定的窗口上显示一幅图像。如查这个窗口的创建是使用参数

CV_WINDOW_AUTOSIZE ,则图像将按照源尺寸显示。否则图像将被缩放到合适的窗口大小显示。图像的缩放功能依赖于图像的深度:

        If the image is 8-bit unsigned, it is displayed as is.

        If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the value range [0,255*256] is mapped to [0,255].

        If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the value range [0,1] is mapped to [0,255].

3. 创建一个窗口 namewindow

函数原型:

void namedWindow(const string &winname,int flags)

参数:

        winame ---- 窗口的名字,也用于一个窗口的标识

        Flags ---- 窗口的一个标志.如果设置为CV_WINDOW_AUTOSIZE,这个窗口将自动的使用图像的大小,且不可以改变窗口的大小。默认参数为CV_WINDOW_AUTOSIZE.

其他的标识:

        CV_WINDOW_NORMAL设置这个值用户可以设置窗口大小

        CV_WINDOW_OPENGL 创建的窗口支持opengl

功能:

        创建一个窗口用于显示图像和进度条。

在使用完创建的窗口后可以使用destroyWindow或是estroyAllWindow来关闭窗口。

在前面的文章里用到函数都了解完了,现在再来看一下imwrite

4. 写图像文件 imwrite

函数原型:

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

参数:

        filename 文件的名字(注:需要加上文件的格式)

        Image 要被保存的图像

        Params 特定格式保存的参数编码

功能:

        imwrit 函数用于将图像保存到指定的文件。图像的格式是基于文件的扩展名的,可以保存的扩展名和imread中要以读取的扩展名一样。

对于其他的三个在前面的程序中都有出现过,就不再写例子了,imwrite这个还没有使用过

在这里写一个简单的例子。看下面的代码:

#include <QCoreApplication>

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

void imwrite_test()
{
    bool sign = true;
    Mat image = imread("F:/images/group.jpg");

    Mat result;

    cv::cvtColor(image,result,CV_BGR2GRAY);//把彩色转换为灰度图

    sign = imwrite("F:/images/grount_gray.jpg",result);  //保存图像
    if(sign != true)
    {
        return;
    }

    cv::namedWindow("image");
    cv::imshow("image",image);

    cv::namedWindow("result");
    cv::imshow("result",result);

}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    imwrite_test();
    return a.exec();
}


在写入的目录下可以看到

clip_image001

完整的工程:http://download.csdn.net/detail/chengfei609/8769943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值