首页 >> 大全

OpenCV学习笔记--第一个OpenCV程序:图片读写显示

2023-08-08 大全 23 作者:考证青年

配置使用库

在上节中我们已经生成了可用于或者QT5 with MinGW开发的库,接下来我们写一个简单的程序测试一下。

因为我电脑上装了QT而没有装,所以后续笔记的示例程序可能都是使用Qt 进行编码展示,不过没关系,代码是通用的,使用配置也很简单,无非是包含头文件,配置导入库。

下面给出QT上的代码示例,使用Qt 新建一个不使用QT库的C++控制台程序,如下图所示:

consloe

在.pro配置文件中内容如下:

TEMPLATE = appCONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qtSOURCES += main.cppINCLUDEPATH += \D:/opencv/build/includeLIBS += \-LD:/opencv/build/mingw/lib \-lopencv_world320.dll

具体的 头文件路径和LIBS导入库路径大家按照自己电脑上库所在路径设置好。没有使用过QT的需要说明下的是LIBS的写法类似Linux上链接库的语法,使用-L设置link路径,使用-l设置具体库,因为Linux上导入库是使用lib开头的,.a的后缀,所以.dll的全名是.dll.a。

下面是main.cpp的代码:

#include 
#include 
using namespace cv;int main(int argc, char *argv[]){printf("Start our first travel of OpenCV!\n");Mat matSrc, matGray;matSrc = imread("opencv-logo.png", IMREAD_UNCHANGED);if (matSrc.empty()){printf("imread failed \n");return -1;}namedWindow("src", WINDOW_AUTOSIZE);imshow("src", matSrc);cvtColor(matSrc, matGray, COLOR_BGR2GRAY);namedWindow("gray", WINDOW_AUTOSIZE);imshow("gray", matGray);imwrite("opencv-logo-gray.png", matGray);waitKey();destroyAllWindows();return 0;
}

包含了的头文件/.hpp,即全路径是D://build///.hpp,这个头文件囊括了各模块的其它头文件,所以我们只需要包括这个头文件就可以了,如果你的不行请到上篇笔记中下载我编译生成好的。

如果配置无误,则是可以正常编译生成.exe文件的,在.exe文件所在目录放一张-logo.png图片,运行exe,可以看到如下的原图和灰度图,并且将灰度图写入了-logo-gray.png文件中,如果提示找不到.dll的小伙伴,是因为没有将这个动态库的路径配置到PAHT中,或者你也可以将.dll拷贝到当前.exe目录或者C:/目录下(这样不用每次都拷贝都对应exe目录了,但是发行版给别人用的时候还是需要把.dll也提供出去的):

sample01

API讲解

下面简单介绍一下上面例子中用到的几个的API函数,使用了命名空间cv,以防止和其它库名字冲突。

1、 Mat

Mat是一种存储矩阵数据的结构体,位于的Core模块中,是最常用的数据结构,empty方法可以判断是否为空,Mat其它方法大家可以跳转(Qt 使用F2即可)到头文件中去看。

此外、和ogl::构造函数都可以直接接受Mat类型。这在、、的参数中都可以发现直接将Mat作为参数传入。

2、 、

这两个API 位于的模块中,即图片的编解码模块,支持bmp、jpeg、png、tiff、webp等多种图片格式的读写,从上节编译的过程中我们可以发现使用了第三方、、、等图片编解码库。

的第二个参数可以指定将图片解码成什么格式存储在Mat中,表示原图,其它还有单通道灰度图、三通道BGR图,更多的大家可以自行跳转到定义处。

3、 、、、

这些API位于的模块,该模块定义了和用户进行界面交互的接口,指定名称来创建窗口,销毁所有库创建的窗口,此外还有一个可以销毁指定名称窗口。将一副图片显示在对应名称窗口中,宏即指窗口大小随显示图片大小变化。用于等待键盘输入,它可以有一个参数指定等待多少ms,默认0代表永远等下去,如果在给定等待时间内没有键盘输入则返回-1,否则返回按键的对应值。

4、

这个API位于的模块,即图片处理模块。cvt是转换的意思,可以将图片数据从一种表示转换为另一种表示,例如例子中的将BGR数据转换为GRAY灰度图(灰度图实际上是YUV数据中的Y数据),灰度图在后面的图像分析处理中大有用处。此为还有更多中颜色表示法的转换宏可以跳转过去自己看看。

总结

怎么样,学习并不是很难吧,相反充满了乐趣,因为你能够实时看到你变换处理后的图片效果,然后向朋友炫耀你的新发现新成果。图像算法并没有你想的那么深奥晦涩,至少基本的算法的API都帮我们封装好了,我们要做的只是使用这些API做出酷炫的效果。 me一起学习下去吧。。。

girl

(看程序累了,就看下制作出来的美女轮廓图吧,嗯,不许流口水...)

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了