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
函数原型:
参数:
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
函数原型:
参数:
winame ---- 窗口的名字,也用于一个窗口的标识
Flags ---- 窗口的一个标志.如果设置为CV_WINDOW_AUTOSIZE,这个窗口将自动的使用图像的大小,且不可以改变窗口的大小。默认参数为CV_WINDOW_AUTOSIZE.
其他的标识:
CV_WINDOW_NORMAL设置这个值用户可以设置窗口大小
CV_WINDOW_OPENGL 创建的窗口支持opengl
功能:
创建一个窗口用于显示图像和进度条。
在使用完创建的窗口后可以使用destroyWindow或是estroyAllWindow来关闭窗口。
在前面的文章里用到函数都了解完了,现在再来看一下imwrite
4. 写图像文件 imwrite
函数原型:
参数:
filename 文件的名字(注:需要加上文件的格式)
Image 要被保存的图像
Params 特定格式保存的参数编码
功能:
imwrit 函数用于将图像保存到指定的文件。图像的格式是基于文件的扩展名的,可以保存的扩展名和imread中要以读取的扩展名一样。
对于其他的三个在前面的程序中都有出现过,就不再写例子了,imwrite这个还没有使用过
在这里写一个简单的例子。看下面的代码:
在写入的目录下可以看到
完整的工程:http://download.csdn.net/detail/chengfei609/8769943
由于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
相关文章推荐
- 关于qt学习的一点小记录(1)
- QT中获得打开文件的名字
- 不需要用任何辅助工具打包Qt应用程序
- no chain can produce code for this qt version please define one or more tool chains问题
- QT菜单栏添加
- QT学习 之 文本文件读写
- Qt 学习 之 二进制文件读写
- Qt学习 之 文件
- Qt之再谈阴影边框
- Qt之加密算法[转]
- Qt的学习
- Qt定时器的使用
- QT离线安装包下载地址
- Qt中需要注意的基本问题
- Qt学习笔记--窗口部件(Widget)
- Qt学习笔记--QtCreator快捷键
- Qt学习笔记--编程技巧总结
- QT积累
- Qt4学习(2)——布局使用(制作登记界面)
- QT连接Sql Sever数据库