OPENCV学习笔记2_Mat 加载, 显示

1.1 Introduction to related functions

   1.Imread() function

Mat imread( const String& filename, int flags = IMREAD_COLOR );

  • filename:Name of file to be loaded
  • flags:载入标识,指定一个加载图像的颜色类型(参考enum ImreadModes)。自带缺省值1,如果在调用时忽略这个参数,就表示载入三通道的彩色图像。
enum ImreadModes {
       IMREAD_UNCHANGED     = -1,
// !< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
// 不进行转化,比如保存为了16位的图片,读取出来仍然为16位
       IMREAD_GRAYSCALE     = 0,
// !< If set, always convert image to the single channel gray scale image.
// 进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1
       IMREAD_COLOR         = 1,
// !< If set, always convert image to the 3 channel BGR color image.
// 进行转化为三通道图像
       IMREAD_ANYDEPTH      = 2,
// 如果图像深度为16位则读出为16位,32位则读出为32位,其余的转化为8位。
       IMREAD_ANYCOLOR      = 4,
// !< If set, the image is read in any possible color format.
/*
..............
*/
     };
/*
Mat image=imread("test.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像
*/

2.  namedWindow() function

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

·  flags,窗口的标识,可以填如下的值:

CV_WINDOW_AUTOSIZE, cannot change the window size manually(自适应窗口大小)

CV_WINDOW_NORMAL,   enables you to resize the window(没有限制)

WINDOW_OPENGL,     如果设置了这个值的话,窗口创建的时候便会支持OpenGL

namedWindow函数的作用是,通过指定的名字,创建一个可以作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不做任何事情。

3.  imshow() function

void imshow(const String& winname, InputArray mat);

·  winname,填需要显示的窗口标识名称

·  mat,InputArray 类型,填需要显示的图像; typedef const _InputArray& InputArray;可查看_InputArray定义,一般遇到InputArray类型当作Mat类型即可

imshow函数用于在指定的窗口中显示图像。如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口(取决图像深度)。

·  如果载入的图像是8位无符号类型(8-bit unsigned),就显示图像本来的样子。

·  如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是说,值的范围是[0,255 x 256]映射到[0,255]。

·  如果图像是32位浮点型(32-bit floating-point),像素值便要乘以255。也就是说,该值的范围是[0,1]映射到[0,255]。

1.2 Mat Loading, displaying example

/*
    The opencv_core module that contains the core functionalities of the library, in particular, the basic data structures and arithmetic functions,包含了程序库的核心功能,特别是基本的数据结构和算法函数;
    The opencv_highgui module that contains the image and video reading and writing functions, along with other user interface functions,包含图像、视频读写函数和部分用户界面函数;
    The opencv_imgproc module that contains the main image processing functions
*/

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

#include<iostream>
using namespace std;

using namespace cv;

int main( int argc, char** argv ) {

    //Mat image;                         // creates an image of size 0 by 0
    Mat image = cv::imread("test.jpg");  // read an image from file, decode it, and allocate the memory

    if (!image.data)                     // Check for invalid input
    //if(image.empty())
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    cout << "size: " << image.size().height << " , " << image.size().width << endl;

    namedWindow("My Image", WINDOW_NORMAL);            // Create a window for display

    /*
    Several image transformations in OpenCV can be performed in-place,
    However,we can always create another matrix to hold the output result and that is what we will do:
    */
    Mat result;
    flip(image, result, 1);          // positive for horizontal,0 for vertical,negative for both

    namedWindow("Output Image");     // the result is displayed on another window
                                     // 如不介意窗口大小可变,可直接注释掉上一句,因imshow可以直接创建窗口
    imshow("Output Image", result);  // Show our image inside it

    imshow("My Image", image);       // specify the image to be shown on this special window

    /*
    Since it is a console window that will terminate at the end of the main function, we add an
    extra highgui method to wait for a user key before ending the program:
    */

    waitKey();                            // Wait for a keystroke in the window
    //waitKey(5000);
    //cv::imwrite("output.bmp", result);  // save the processed image on  disk
    return 1;
}

时间: 2024-10-21 06:27:29

OPENCV学习笔记2_Mat 加载, 显示的相关文章

OGEngine学习笔记---资源加载

声音管理兼容各种音频文件格式,比特率和样本率 OGEngine开源引擎兼容各种音频视频文件格式,并且引用了硬件加速技术,来对音频文件进行io读取,简化了资源的加载和读取写入的过程,大幅度减少应用卡顿.无响应的状况出现. 一个背景音乐 多个音效 OGEngine开源引擎在同一时间只能播放一首背景音乐,但是能同时播放多个音效. 首先自定义一个枚举类ConfigData,用来存放背景音乐key和音效key. public class ConfigData { /** 背景音乐*/ public sta

Away3D 学习笔记(一): 加载3DS格式的模型文件

加载外部的3DS文件分为两种: 1: 模型与贴图独立于程序的,也就是从外部的文件夹中读取 1 private function load3DSFile():Loader3D 2 { 3 loader = new Loader3D(); 4 loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE,onLoadComplete); 5 loader.addEventListener(AssetEvent.ASSET_COMPLETE,onAsset

学习笔记TF015:加载图像、图像格式、图像操作、颜色

TensorFlow支持JPG.PNG图像格式,RGB.RGBA颜色空间.图像用与图像尺寸相同(height*width*chnanel)张量表示.通道表示为包含每个通道颜色数量标量秩1张量.图像所有像素存在磁盘文件,需要被加载到内存. 图像加载与二进制文件相同.图像需要解码.输入生成器(tf.train.string_input_producer)找到所需文件,加载到队列.tf.WholeFileReader加载完整图像文件到内存,WholeFileReader.read读取图像,tf.ima

ArcGIS API for JavaScript3.x 学习笔记[3] 加载底图(一)【天地图(经纬度版)】

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>天地图底图加载(经纬度版本)</title> 6 <link rel="stylesheet" href="https://js.arcgis.com/3.21/esri/css/esri.css"> 7 <script

Flixel学习笔记002 加载地图(一)

这篇的参考官方代码示例Cameras,代码在https://github.com/phmongeau/SplitScreen/tree/master/src. 首先用Windows的画图画了几个格,大小是20*20的. 然后参照官方代码示例,写了一段代码: 1 package org 2 { 3 import org.flixel.FlxState; 4 import org.flixel.FlxTilemap; 5 6 /** 7 * ... 8 * @author QuanJP [email

ArcGIS API for JavaScript3.x 学习笔记[5] 加载底图(四)【高德在线地图】

/** * Created by WanderGIS on 2015/7/15. */ define(["dojo/_base/declare", "esri/geometry/Extent", "esri/SpatialReference", "esri/geometry/Point", "esri/layers/TileInfo", "esri/layers/TiledMapServiceLa

Hibernate学习笔记-懒加载Lazy-true

1. 懒加载概述以及使用情景 描述:懒加载(lazy),简单说就是延时.延迟加载. 情景:在Hibernate框架应用中,就是当我们要访问的数据量过大时,使用缓存并不太合适,因为内存容量有限 ,为了减少系统资源的消耗,减少并发量,这时需要用懒加载机制来弥补这种缺陷,但是这并不意味用了懒加载总体性能就提高了. 应用: 比如学校school和学生student,学校与学生1对多,如果lazy设置为 false,那么只要加载了一个学校的信息,就会根据一对多配置的关系把所有学生的信息也加载出来.但是实际

[WPF学习笔记]动态加载XAML

好久没写Blogs了,现在在看[WPF编程宝典],决定开始重新写博客,和大家一起分享技术. 在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码. 以下是动态加载XAML的一个事例代码. 在debug文件夹下新建一个文本文件,重命名为:file.xaml 插入界面代码: <DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <Button Name=

ArcGIS API for JavaScript3.x 学习笔记[4] 加载底图(三)【Open Street Map开放街道地图】

Open Street Map OpenStreetMap(简称OSM,中文是开放街道地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图. OSM是一款由网络大众共同打造的免费开源.可编辑的地图服务.OpenStreetMap它是利用公众集体的力量和无偿的贡献来改善地图相关的地理数据.OSM是非营利性的,它将数据回馈给社区重新用于其它的产品与服务.而其他地图则是将大多数的地图数据出售给第三方. OSM的地图由用户根据手提GPS装置.航空摄影照片.其他自由内容甚至单靠地