opencv学习笔记(一)读入一幅图片
来源:互联网 发布:汉字书写顺序软件 编辑:程序博客网 时间:2024/05/16 05:33
首先说明一下,我只是一个小白,但是也学习过opencv一段时间,现在准备把自己学习的经验(姑且算是吧,大牛们肯定是看不上的)写成博客,算是对自己学习经历的一个纪念吧。
首先将要读入的图片直接放在工程文件夹下。
程序如下:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc,char **argv[])
{
const char* pstrImageName ="a.jpg";
const char* pstrWindowsTitle="TEST";
IplImage*pImage=cvLoadImage(pstrImageName,CV_LOAD_IMAGE_UNCHANGED);
cvNamedWindow(pstrWindowsTitle,CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsTitle,pImage);
cvWaitKey();
cvReleaseImage(&pImage);
cvDestroyWindow(pstrWindowsTitle);
}
下面是关于这个程序的详细解释。
1.0头文件
具体的可以参考博客
http://www.csdn123.com/html/topnews201408/95/8695.htm
然后根据本菜鸟的经验,任何程序的库文件其实可以直接写成
#include <opencv2/opencv.hpp>
肯定可以用,因为相当于把所有的库文件都写进来了。
1.1 int main(int argc, char **argv[])
关于这个写法,有两种说法
int main(int argc,char *argv[])或者写成char**argv[]但是好像是一样的,都能运行。
我看都有很多例子是写成char **argv[],但是我借的一本C语言书上写成char *argv[]。
argc是命令行总的参数个数
argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数是命令行后面跟的用户输入的参数,比如:
int main(int argc, char* argv[])
{
int i;
for (i = 0; i<argc; i++)
cout<<argv[i]<<endl;
cin>>i;
return 0;
}
执行时敲入
F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE aaaa bbb ccc ddd
输出如下:
F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE ——argc[0]
aaaa ——argc[1]
bbb ——argc[2]
ccc ——argc[3]
ddd ——argc[4]
1.2 cvLoadImage()
该函数是一个高层调用接口,它通过文件名确定被加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。该函数执行完后将返回一个指针,此指针指向一块为描述该图像文件的数据结构(IplImage)而分配的内存块。
所以才会有IplImage *pImage=cvLoadImage();——定义一个结构体指针指相应的内存块。
函数原型:
IplImage* cvLoadImage(
const char* filename,
int flags=CV_LOAD_IMAGE_COLOR );
其中,flags :指定读入图像的颜色和深度:
指定的颜色可以将输入的图片转为
3通道
(CV_LOAD_IMAGE_COLOR),
单通道
(CV_LOAD_IMAGE_GRAYSCALE),
或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。
深度指定输入的图像是否转为每个颜色通道每象素8位,或者同输入的图像一样保持不变。
选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型。
如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR——将载入3通道图。
CV_LOAD_IMAGE_ANYCOLOR
和CV_LOAD_IMAGE_UNCHANGED
是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有着可以和CV_LOAD_IMAGE_ANYDEPTH同时使用的优点,所以CV_LOAD_IMAGE_UNCHANGED不再使用了。
如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。
cvLoadImage( filename, -1 ); 默认读取图像的原通道数
cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图
cvLoadImage( filename, 1 ); 读取彩色图
1.3 IplImage
上面提到了IplImage,它是一个结构体,而且是opencv里面最常用的结构体。
1.4 cvNamedWindow()
cvNamedWindow(参数1——自己命名,参数2)
该函数也是一个高层调用接口,作用是在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。函数的第一个参数指定了该窗口的窗口标题,第二个参数定义了窗口的属性:
默认值是0,这样的话图像只能在窗口中根据窗口的大小进行拉伸或缩放;
而设置成CV_WINDOW_AUTOSIZE,窗口会根据图像的实际大小自动进行拉伸或缩放,以容纳图片。
1.5 cvShowImage()
cvShowImage(参数1——窗口名称,参数2——相应的IplImage*类型指针)
函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。该函数在被调用时,该窗口将重新绘制,并且图像也会显示在窗口中。如果窗口在创建时CV_WINDOW_AUTOSIZE被指定作为函数cvNamedWindow()的第二个参数,该窗口将根据图像的大小自动调整。
方便起见,我们使用文件名来表示窗口名称。这样处理很好.,因为OpenCV默认将窗口名称显示在窗口的顶部,这使得我们可以知道正在看的是哪一幅图像。
1.6 cvWaitKey()
函数的功能是使程序暂停,等待用户触发一个按键操作。
如果参数设置为正数——相当于延时,时长为该整数值个毫秒单位,然后继续执行程序。
如果设置为0或负数,程序将一直等待用户触发按键操作。
即该程序停在显示函数处,不运行其他代码;否则,图像无法正常显示。
1.7 cvReleaseImage()
cvReleaseImage( & xx);
一旦用完加载到内存的图像文件,我们就可以释放为该图像文件所分配的内存。我们通过该函数传递一个 IplImage*的指针参数调用该函数,用以执行内存释放操作。
因为刚开始定义了一个IplImage *pImage,所以最后释放的时候是cvReleaseImage(&pImage);
1.8 cvDestroyWindow()
cvDestroyWindow( 窗口名称 );
该函数用于销毁显示图像的窗口,同时释放与该窗口想关的内存资源。
- opencv学习笔记(一)读入一幅图片
- openCV Python学习笔记(一)图片的读入,显示与保存
- 《python+opencv学习》一、Gui Features in Opencv(1)读入、保存图片
- opencv学习(1)——读入并显示一幅图片
- 【OpenCV学习笔记】【函数学习】十五(批量读入图片)
- Opencv学习手册(一)--- 图像文件读入和显示
- OpenCV笔记1:显示一幅图片(一)
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一)
- opencv学习笔记(一)
- 《学习OpenCV》笔记(一)
- OpenCV学习笔记(一)
- opencv学习笔记(一)
- opencv 学习笔记(一)
- CH8,p150,上传综合应用 error_reporting, move_uploaded_file应用;复选值输出;
- PAT A1059
- apache性能测试工具ab使用详解
- 学生资料的收集页面
- 开通博客了 定个小目标
- opencv学习笔记(一)读入一幅图片
- [CSS]CSS background属性
- 14实践项目1.4
- windows nginx 负载均衡 公用 session
- 爬取百度贴吧用户的帖子
- 【C语言】运算符
- google官方文档-第三篇
- Redis命令:数据类型操作
- mysql主从复制