您的位置:首页 > 编程语言 > Qt开发

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

2015-06-11 23:17 573 查看
在(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();
}


在写入的目录下可以看到





完整的工程:http://download.csdn.net/detail/chengfei609/8769943
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: