zoukankan      html  css  js  c++  java
  • OpenCV基础篇之读取显示图片

    程序及分析

    /*
     * FileName : read.cpp
     * Author   : xiahouzuoxin @163.com
     * Version  : v1.0
     * Date     : Tue 13 May 2014 07:34:25 PM CST
     * Brief    : 
     * 
     * Copyright (C) MICL,USTB
     */
    #include <cv.h>
    #include <highgui.h>
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, char **argv)
    {
        Mat img;
    
        img = imread(argv[1], 1);
    
        if (argc != 2 || !img.data) {
            cout<<"No image data.
    "<<endl;
            return -1;
        }
    
        namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
        imshow("Display Image", img);
    
        waitKey(0);
    
        return 0;
    }
    
    1. 包括和,cv.h中包括了OpenCV的核心功能,包括Mat等数据结构,highgui.h主要包括用于图片显示的接口。

    2. Mat是OpenCV中特有的矩阵类,Mat.data是数据指针,通过推断数据指针是否为NULL能够确定是否读入图片数据。

    3. namedWindow有两个參数,其函数原型例如以下:

      CV_EXPORTS_W void namedWindow(const String& winname, int flags=WINDOW_AUTOSIZE);
      

      第一个參数winname是窗体名,是窗体对象的唯一标识。就和人的名字一样,因此,不能同一时候有两个同样名字的窗体!flags设置窗体属性,缺省參数值为WINDOW_AUTOSIZE=CV_WINDOW_AUTOSIZE=1。

    4. 和matlab中的一样。有木有。第一个參数表示我要在哪个窗体显示,第二參数表示我要显示那幅图像,用脚趾头想一想。是不是有这两个參数就能知道在哪显示什么了?

    5. 另一个waitKey(int delay=0)表示图片显示窗体保留时间,单位为ms。当delay=0时,按下键盘上随意按键才会关闭图像显示的窗体

    6. 用于编译上述程序的Makefile例如以下:

      TARG=read
      SRC=read.cpp
      LIB=-L/usr/local/lib/
      INC=-I/usr/local/include/opencv/
      CFLAGS=-g
      
      $(TARG):$(SRC)
          g++ -o $@ ${CFLAGS} $(LIB) $(INC) -lopencv_core -lopencv_highgui $^
      
      .PHONY:clean
      
      clean:
          -rm $(TARG) -f 
      

      我将OpenCV安装到默认文件夹/usr/local下,因此在使用g++编译时要包括链接库(-L/usr/local/lib/)和头文件(-I/usr/local/include/opencv/

      注:在OpenCV基础篇中都使用该格式的Makefile文件,因此后面的例程都能够拷贝后直接使用,仅仅须要改动TARG和SRC參数就可以!

    效果

    result

  • 相关阅读:
    (转)Linux下/etc/rc.local与/etc/init.d的区别与联系
    (转)谈免驱
    (转)获取android源码时repo的错误
    (转)platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备
    (转)typedef 函数指针的用法
    (转)分析kernel的initcall函数
    (转)Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解
    tiny210V2开发板hdmi输出到10.1寸LCD,无图像
    (转)学习linux的几本书
    (转)RGB接口和i80接口的区别
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6907523.html
Copyright © 2011-2022 走看看