Opencv 例程讲解1 ----如何载入并显示图片
来源:互联网 发布:好用的面部乳液 知乎 编辑:程序博客网 时间:2024/06/05 04:06
今天介绍一个简单的但最常用的例程,从电脑中读入图片并显示出来。如果小伙伴们已经编译好了tutorial和examle例程程序(没有的可以参考Opencv 例程讲解 开头篇----window下例程编译),可以在tutorial文件夹下找到一个名叫“(TUTORIAL) introduction_windows_vs”,或者”(TUTORIAL) display_image“的例程程序,这两个程序是一样的。
源代码如下(中文部分为我自己的理解):
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>using namespace cv;using namespace std;int main( int argc, char** argv ){ if( argc != 2) //参数个数2个, 使用示例 Project.exe imagePath/test.jpg { cout <<" Usage: display_image ImageToLoadAndDisplay" << endl; return -1; } Mat image; // opencv中最主要的数据存储格式 image = imread(argv[1], IMREAD_COLOR); // Read the file // 为highgui库中的API 函数,第一个参数为图片路径,可以是相对路径也可以是绝对路径,第二个参数控制读入图片的方式,可以有以下几种选择 // IMREAD_UNCHANGED =-1 // 8bit, color or not // IMREAD_GRAYSCALE = 0 // 8bit, gray // IMREAD_COLOR = 1 // color // IMREAD_ANYDEPTH = 2 // any depth, // IMREAD_ANYCOLOR = 4 // any color // 以上为在highgui.hpp中的定义,感觉还是不是很具体, if(! image.data ) // Check for invalid input // data为Mat 格式的数据入口指针,默认为uchar* 类型,没有数据时候,为空 { cout << "Could not open or find the image" << std::endl ; return -1; } namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display. // 为highgui库中的API函数 // 有两个参数,第一个参数为窗口名,类型为std::string,第二个参数为窗口控制参数,通常设置为 WINDOW_NORMAL 或 WINDOW_AUTOSIZE imshow( "Display window", image ); // Show our image inside it. // 为highgui库中的API 函数 // 有两个参数,第一参数为窗口名,可以获得窗口handle,第二个参数为要显示的图像 waitKey(0); // Wait for a keystroke in the window return 0;}
可以看出来,例程通过main参数传递图片路径,可以在cmd下输入命令运行程序。
如果不想觉得cmd命令行显示图片过于麻烦,我们可以直接指定图片的路径,注释掉以下语句,然后给定图片路径,即可,第二个参数可以不填,默认IMREAD_COLOR
// if( argc != 2)// {// cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;// return -1;// } Mat image;// image = imread(argv[1], IMREAD_COLOR); // Read the fileimage = imread("F:\\image_set\\lena.jpg");
注意,这里的路径输入需要用 \\ ,
按下任意键,程序结束。
另外,imread的第二个参数如 IMREAD_COLOR 等,在highgui.hpp中说明不是很详细,如果想要了解,imread过程中,这个参数到底是如何起作用的,我们可以在源码中找到答案,跟踪进入imread的源码文件中,我们可以发现以下这个参数通过以下语句来发挥作用
int type = decoder->type(); if( flags != -1 ) { if( (flags & CV_LOAD_IMAGE_ANYDEPTH) == 0 ) type = CV_MAKETYPE(CV_8U, CV_MAT_CN(type)); if( (flags & CV_LOAD_IMAGE_COLOR) != 0 || ((flags & CV_LOAD_IMAGE_ANYCOLOR) != 0 && CV_MAT_CN(type) > 1) ) type = CV_MAKETYPE(CV_MAT_DEPTH(type), 3); else type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1); }其中,type为图片解码后的类型,flags即为传人的第二个参数,从if语句的控制流可以看出,当传人参数不是IMREAD_ANYDEPTH时候,Mat 的默认创建类型为CV_8U,表示一个像素点数据用8位的无符号char表示,值的范围为0~255,当传人参数中有IMREAD_COLOR时,通道为3;当传人参数有IMREAD_ANYCOLOR时,则根据源图像的通道数决定,如果是单通道的灰度图像,则也为灰度图像,如果通道数>1,则也为3通道;如果是IMREAD_GRAYSCALE则为单通道;如果是CV_LOAD_IMAGE_UNCHANGED,则按照原图type创建。注意IMREAD_ANYDEPTH可以与IMREAD_ANYCOLOR或者IMREAD_COLOR配合使用,如果只有IMREAD_ANYDEPTH输入的话,则默认以单通道载入图像。
0 0
- Opencv 例程讲解1 ----如何载入并显示图片
- opencv载入并显示图片
- 用OpenCV载入并显示图片
- 用OpenCV载入并显示图片
- Opencv载入图片并显示的问题
- linux openCV 显示图片例程
- Opencv 例程讲解 4 ----图片容器Mat
- opencv载入图片,并得到行列值
- Opencv学习笔记_载入显示图片
- Android图片本地载入,显示绝对路线,并载入
- Flex中如何利用Repeater组件载入XML并显示图片文件
- Opencv 例程讲解 6 ---- 图片融合 addWeighted到底有多快?
- 研究Opencv之二:载入并显示图像
- 【OpenCV】加载并显示图片
- Opencv 例程讲解 3 ----如何高效的遍历图像
- opencv 例程讲解5 ---- 如何实现卷积运算
- OpenCv图像载入显示
- openCV---载入图片
- cpp 字符串加密 解密
- Spring Data JPA简单使用
- xcode中svn的使用以及和github的配合使用
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- C++各种指针辨析
- Opencv 例程讲解1 ----如何载入并显示图片
- Differences between Waterfall, Iterative Waterfall, Scrum and Lean Software Development
- centOS软件包安装
- 数学、海豚和花朵
- UE中的几个极有用功能
- java线程技术7_线程中断
- 希尔排序实现c++
- 【励志】比风水厉害100倍的宇宙定律
- delphi 字符串回车换行