OpenCV2学习(1)——显示图像

来源:互联网 发布:南京栖霞网络问政 编辑:程序博客网 时间:2024/05/18 01:03

2017.04.22


编程环境:

  • Linux Ubuntu 14.04
  • OpenCV 3.2.0
  • Qt 5.8.0

注:虽然是opencv3环境,但由于手头资料用的是OpenCV2,所以仍然是opencv2的编程风格,资料下载地址:
http://linux.linuxidc.com/index.php?folder=cHViLzIwMTEvMDgvMDQ=

main.cpp代码:

#include "highgui.h"using namespace cv;int main(int argc, char* argv[]){    //argc表示命令行的输入参数个数,argv[]表示参数数组,argv[0]指向程序本身,argv[1]指向第一个参数    //cvLoadImage(argv[1])从argc[1]指向的图片路径载入图片    IplImage* img = cvLoadImage(argv[1]);    //cvNamdWindow()创建一个显示图片的窗口,窗口标题为"showImg",CV_WINDOW_AUTOSIZE表示窗口大小自适应图片大小    cvNamedWindow("showImg",CV_WINDOW_AUTOSIZE);    //cvShowImage()表示在窗口"showImg"中显示图片    cvShowImage("showImg",img);    //cvWaitKey(int delay=0)表示等待按键输入    cvWaitKey(0);    //cvReleaseImage(&img)释放图片内存    cvReleaseImage(&img);    //cvDestroyWindow("showImg")表示释放窗口内存    cvDestroyWindow("showImg");} 

编译文件有两种方式:
1. 在文件目录下编写build.sh脚本

#!/bin/bashgcc main.cpp -o test_01_show_img `pkg-config --cflags --libs opencv`

上述脚本命令表示用gcc编译main.cpp,输出可执行文件test_01_show_img(可以自己命名),后面反引号表示将反引号中的命令结果作为参数传给之前的命令gcc,pkg-config --cflags --libs opencv 表示链接到opencv库

  • 在终端下进入目录,执行:sudo chmod u+x build.sh //修改文件执行权限
  • 终端下输入:./build.sh //通过脚本编译文件
  • 终端下输入 :./test_01_show_img ~/图片/00000.jpg //执行程序,显示~/图片 目录下的00000.jpg 图片

这里写图片描述

2.cmake方式

  • 将opencv的安装目录下opencv-3.2.0/samples/cpp/example_cmake 的CMakeLists.txt文件copy到工程目录下
    cp CMakeLists.txt ~/MyDemo/Opencv/test_01_show_img
  • 修改CMakeLists.txt:
    • project(opencv_example_project) –> project(test_01_show_img)
    • add_executable(opencv_example example.cpp) –> add_executable(test_01_show_img main.cpp)
    • target_link_libraries(opencv_example ${OpenCV_LIBS})–>
      target_link_libraries(test_01_show_img ${OpenCV_LIBS})
  • 在终端下进入到工程目录cd ~/MyDemo/Opencv/test_01_show_img
  • 执行:cmake .///生成makefile文件
  • 执行:make
  • 执行:./test_01_show_img ~/图片/00000.jpg
    这里写图片描述
    这里写图片描述

Notice:
1. 如果是在Qt中创建工程,并希望在Qt环境里编译运行,那么需要在.pro文件中添加下列代码,INCLUDEPATH表示文件路径,LIBS表示所用库的链接文件,与windows系统下的.dll文件类似。

INCLUDEPATH += /usr/local/include \           /usr/local/include/opencv \           /usr/local/include/opencv2LIBS += /usr/local/lib/libopencv_highgui.so 

2. cvWaitKey()函数的功能是使程序暂停,并等待用户出发按键操作。

  • 参数默认值为0,如果参数是一个正数num,则程序将暂停一段时间,单位是num 毫秒。
  • 如果参数是0或者负数,程序将一直等待用户触发按键操作。
  • 返回值为按键的ASCII码,如ESC键返回值为27
  • 因此可以使程序循环执行下列代码,当用户按键ESC时退出循环

        while(!stop)    {        ...//循环执行的操作        char c = cvWaitkey(time); //暂停time ms        if(c == 27)            stop = true;        ...    }
0 0