opencv_第1节 [图像读取与显示]
欢迎伙伴们一起学习opencv
1.本人从事软件开发2年,做过两三个像样的项目,并全部投入了市场使用;
2.本人在软件开发领域主要从事是基于C++ Qt进行PC端,ARM LINUX环境下的软件开发;
3.本人深知目前道行才刚刚入门,要想在该行业扎根,需有颗学无止境的心,故周末都坚持进行学习提升;
4. 本人在学习oencv阶段,会将个人见解,学习体会发布出来,主要还是给后续自己看的;
5. 本人发布的文章如果能帮助部分伙伴,那也将是件让自己愉快的事情,故如果有伙伴对我发布的opencv篇章有疑问,可私信我;
6. 因本人学习opencv是在初级阶段,故不会对opencv文章进行过多的描述;
7. 自己对所有出现的API理解,都写在了代码片段的注释中;
8. 后续本人进入opencv的高级阶段,甚至是从业者,会对当前发布的文章进行归纳,知识点补充;
9. 欢迎同道中人探讨,如果有前辈能指教一二,此乃本人有幸也。
接口详解
代码片段
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
int main(const int argc, const char* argv[])
{
/* @class : Mat
* @brief : 该类为矩阵属性类,当前使用的为该类的默认构造 Mat可以表示N维数组,
数组的每个位置可以是单通道或多通道;可以用来存储图片(灰色或彩色),向量,直方图等;
Mat类分为矩阵头和指向存储数据的矩阵指针两部分;
矩阵头包含矩阵的尺寸,存储方法,地址和引用计数。
矩阵头是一个常数,绝大多数情况下,矩阵头的大小远小于矩阵数量的大小。
* @Function : Mat()
* @brief : Mat类的默认构造函数,不需要传递任何参数,在后续给变量赋值时会自动判断矩阵类型和大小,
实现灵活的存储,常用于存储读取的图像数据和某个函数运算的输出结果
*/
/* @Function : imread() :
* @brief : 用于读取数据
* @param : 图像文件路径
* @param : 读取图像方式,默认为IMREAD_COLOR IMREAD_GRAYSCALE -- 灰度图 具体参考cv::ImreadModes
* @return : Mat对象
*/
Mat src = imread("D:/opencvVsDemo/Images/2.jpg");
/* @Function : empty()
* @brief : 检测Mat对象是否为空
* @return : 如果Mat::total() == 0 或 Mat::data() 为NULL,则返回true
*/
if (src.empty())
{
return -2;
}
/* @Function : nameWindow()
* @brief : 创建一个窗口,创建的窗口通过它们的winname来引用
* @param : 窗口标题中窗口名称,可以用作窗口标识符
* @param : 窗口属性标识 支持的标识有:cv::WindowFlags 例如 WINDOW_NORMAL -- 用户可以调整窗口大小 WINDOW_AUTOSIZE -- 窗口无法调整 受图像限制
*/
namedWindow("ss", WINDOW_NORMAL);
/* @Function : imshow() :
* @brief : 在指定窗口中显示图像。如果窗口是用cv::WINDOW_AUTOSIZE作为标识,则图像显示为原始大小,
* 否则图像将缩放以适应窗口大小,该函数缩放图像,取决于图像的深度。
具体如下:
1.如果载入的图像是8位无符号类型,就显示图像本来的样子
2.如果图像是16位无符号类型或32位整型,便用像素值除以256。值的范围是[0,255\*256]映射到[0,255]
3.如果图像是32位浮点型,像素值便要乘以255,值的范围是[0,1]映射到[0,255]
* @param : 显示窗体的标识名称
* @param : 需要显示的图像 Mat对象
*/
imshow("ss", src);
/* @Function : waitKey()
* @brief : 无限地等待一个键盘事件或等待给定的延时毫秒 这个函数至少创建了1个HighGUI窗口并且处于活动状态下才有效
* @param : 阻塞时长 单位ms 默认为0 一直阻塞等待
* @return : 返回键盘输入的ASCII 如果时长到 未输出键盘字符 则返回-1
*/
waitKey();
/* @Function : destroyAllWindows()
* @brief : 销毁所有打开的HighGUI窗口
*/
destroyAllWindows();
return 0;
}