OpenCV中图像的读取,显示与输出
来源:互联网 发布:学编程怎么开始学 编辑:程序博客网 时间:2024/05/29 14:24
OpenCV1.0中的方法:
#include "highgui.h"
int main()
{
IplImage* img = cvLoadImage("2.jpg"); //将图片加载至内存,img指针指向该内存
cvShowImage("Example",img); //显示该图片
cvWaitKey(0);
cvReleaseImage(&img);
}
运行结果:
早期的OpenCV版本通过cvLoadImage 函数将图像文件加载至内存,同时返回一个 指针,指针指向一块为描述该图像文件数据结构而分配的内存块。
当不再需要加载到内存中的图像文件时,调用cvRealeaseImage函数释放分配给该图像的内存。
cvShowImage 函数会按照原图像的大小来显示,若要改变所显示的图像大小,可通过cvNamedWindow 函数来实现,具体做法如下:
#include "highgui.h"
int main()
{
IplImage* img = cvLoadImage("2.jpg"); //将图片加载至内存,img指针指向该内存
cvNamedWindow("Example",CV_WINDOW_NORMAL); //定义窗口
cvResizeWindow("Example",300,300); //调整窗口大小
cvShowImage("Example",img); //显示该图片
cvWaitKey(0);
cvReleaseImage(&img); //释放分配给图像的内存
cvDestroyWindow("Example"); //销毁窗口,释放为该窗口所分配的内存
}
运行结果:
可以看到原图像以300X300 的像素大小进行显示(注意在cvNamedWindow的定义中 函数的第二个参数默认为CV_WINDOW_AUTOSIZE,必须改为CV_WINDOW_NORMAL,否则无法调用cvResizeWindow改变窗口大小)。
我们再回头来看看cvLoadImage函数。
图像文件数据的存储方式与MATLAB中类似,都是以矩阵的形式,注意此处调用cvLoadImage返回的*img指针并非是矩阵的地址,而是指向IplImage 数据类型的描述。具体内容会在 图像的存储方式 里 进一步阐述。
转到cvLoadImage 的定义:
我们看到cvLoadImage还有一个缺省的int型参数 iscolor , 默认为常量CV_LOAD_IMAGE_COLOR 继续转到该常量的定义,我们看到一个枚举类型:
从各常量的命名和注释我们可以推测,CV_LOAD_IMAGE_GRAYSCALE 将图像读取为灰度图,CV_LOAD_IMAGE_COLOR将图像读取为彩图,CV_LOAD_IMAGE_UNCHANGED 则不改变图像本身灰度图还是彩图的属性。
读取进的图像是灰度图还是彩图不一定依赖于图像本身,可以在读取的时候进行转换,不同的读取方式意味着不同的内存分配方式(如彩图相比于灰度图需要占据更大的内存空间),OpenCV默认将图像以彩图的方式读取进内存。
OpenCV1.0以后的方法:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
MatsrcImg = imread("2.jpg"); //读取图像
imshow("Example",srcImg); //显示图像
waitKey(0);
return0;
}
以上这段代码可以获得同样的读取显示效果,只不过读取图片的函数为imread,那么它与cvLoadImage相比有什么区别呢,我们首先查看该函数的定义:
与cvLoadImage不同的是,该函数的返回值为一个Mat数据类型而非指针(将在图形的存储方式里详解Mat数据类型)。而这两个函数的参数列表是一样的(图像的存放路径,和图像的读取方式),我们看imread函数关于图像读取方式的枚举类型:
从以上程序的对比可以看到,cvLoadImage 与imread 的区别在于返回值,后者因为返回的是一个Mat数据对象而非指针,当生存周期结束时可以自动释放内存,而不用手动释放。
下一节我们将具体讨论图像在内存中是如何存储的
- OpenCV中图像的读取,显示与输出
- OpenCV中图像的读取与显示
- OpenCV中图像的读取与显示
- 【OpenCV】OpenCV 2.4.+版本中图像的读取与显示
- opencv 中图像像素的读取与显示
- 【opencv】2.图像读取、显示、输出
- OpenCV 图像的载入,显示,初级图像混合与输出
- OpenCV学习记录一:图像的读取与显示
- opencv-python实现图像的读取,显示与写入
- opencv学习(1)图像的载入、显示与输出
- OpenCV中读取,显示,保存图像
- OpenCV中图像色素的读取与修改
- Qt对话框显示opencv读取的图像
- opencv 图像的读取显示和保存
- OpenCV-图像的读取、显示,保存
- OpenCV--图像的载入、显示和输出
- opencv的图像载入、显示和输出
- opencv 图像的载入显示和输出
- g++编译c++文件
- ARMv8 與 Linux的新手筆記
- Maven学习系列--03进一步了解Maven
- vmware中的3种网络模式:桥接、NAT(地址转换)、host-only
- 2015-12-13能否给一个网卡配置多个IP,如果能,怎么配置!
- OpenCV中图像的读取,显示与输出
- logaction
- 二叉排序树
- 《java多线程编程核心技术》之java多线程技能
- Spring-Aop注解形式案例<二>
- Dialog && PopupWindow
- iOS之多线程
- JEECG 简单实例讲解自定义表单功能
- 如何让IE9以下版本认识html5元素