OpenCV 2 计算机视觉编程手册读书笔记1

矩阵创建

  Mat类是OpenCV中非常有用类,用来创建和操作多维矩阵。可以有很多方法构造它。

 // 构造函数
//! constructs 2D matrix of the specified size and type
// (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
Mat(int rows, int cols, int type);
Mat(Size size, int type);
//! constucts 2D matrix and fills it with the specified value _s.
Mat(int rows, int cols, int type, const Scalar& s);
Mat(Size size, int type, const Scalar& s); // 感兴趣区域,部分区域,子区块,新的矩阵和m共同使用内存
//! creates a matrix header for a part of the bigger matrix
Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all());
Mat(const Mat& m, const Rect& roi);
Mat(const Mat& m, const Range* ranges); // create()函数
Mat mat(, , CV_8UC3); //构造函数创建矩阵
M.create(, , CV_8UC2); //释放内存重新创建 // Matlab风格的创建方法
Mat zero = Mat::zeros(, , CV_8UC1);
Mat one = Mat::ones(, , CV32F);
Mat eye = Mat::eye(, , CV_64F);

  其中 type参数的值CV_8UC3,表示的是CV_8U类型,3通道,CV_8U即无符号8为数据。3通道相当于BGR通道。

图像读取

cv::imread( const string& filename, int flags);

读取指定的图片,flags可以有以下的值:

enum
{
/* 8bit, color or not */
CV_LOAD_IMAGE_UNCHANGED =-,
/* 8bit, gray */
CV_LOAD_IMAGE_GRAYSCALE =,
/* ?, color */
CV_LOAD_IMAGE_COLOR =,
/* any depth, ? */
CV_LOAD_IMAGE_ANYDEPTH =,
/* ?, any color */
CV_LOAD_IMAGE_ANYCOLOR =
};

图像显示

 // 先命名一个窗口,再使用
namedWindow( "output", CV_WINDOW_AUTOSIZE );
imshow("input", img);

  窗口可以有以下Type:  

 enum
{
//These 3 flags are used by cvSet/GetWindowProperty
CV_WND_PROP_FULLSCREEN = , //to change/get window's fullscreen property
CV_WND_PROP_AUTOSIZE = , //to change/get window's autosize property
CV_WND_PROP_ASPECTRATIO= , //to change/get window's aspectratio property
CV_WND_PROP_OPENGL = , //to change/get window's opengl support //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty
CV_WINDOW_NORMAL = 0x00000000, //the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size
CV_WINDOW_AUTOSIZE = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed
CV_WINDOW_OPENGL = 0x00001000, //window with opengl support //Those flags are only for Qt
CV_GUI_EXPANDED = 0x00000000, //status bar and tool bar
CV_GUI_NORMAL = 0x00000010, //old fashious way //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty
CV_WINDOW_FULLSCREEN = ,//change the window to fullscreen
CV_WINDOW_FREERATIO = 0x00000100,//the image expends as much as it can (no ratio constraint)
CV_WINDOW_KEEPRATIO = 0x00000000//the ration image is respected.
};

图像存储

 cv::imrwite("output.jpg", imgOut);

图像像素操作

  at函数

 void salt(cv::Mat &image, int n)
{
for(int k =; k<n; ++k)
{
int i=rand()%image.cols;
int j=rand()%image.rows;
if(image.channels() == ) // gray image
{
image.at<uchar>(j, i) = ;
}
else if(image.channels() == ) // color image
{
image.at<cv::Vec3b>(j, i)[] = ;
image.at<cv::Vec3b>(j, i)[] = ;
image.at<cv::Vec3b>(j, i)[] = ;
}
}
}

  其中Vec3b的定义为:typedef Vec<uchar, 3> Vec3b。上述代码是在一个图片上随机产生盐点。

  迭代器

 cv::Mat Iterator_<cv::Vec3b> it;
// 定义在Mat_内部的迭代器
cv::Mat_<cv::Vec3b>::iterator it; // 迭代器使用
void colorReduce(cv::Mat &image, int div=)
{
// 得到初始位置的迭代器
cv::Mat_<cv::Vec3b>::iterator it = image.begin<cv::Vec3b>();
// 得到种植位置的迭代器
cv::Mat_<cv::Vec3b>::iterator itend = image.edn<cv::Vec3b>();
// 遍历所有像素
for(; it!=itend; ++it)
{
// 处理每个像素
(*it)[] = (*it)[]/div*div+div/;
(*it)[] = (*it)[]/div*div+div/;
(*it)[] = (*it)[]/div*div+div/;
}
}

  指针操作

// 得到image图像的第index行的首地址
image.ptr<uchar>(index);

图像算术运算

  图像的算术运算可以有加减乘除,可以对图片有亮度有影响,具体的后续再了解。

图像感兴趣区域

  图像感兴趣区域指的是,对一个图片的部分区域感兴趣,则可以只操作感兴趣的部分区域,也即子区域。

OpenCV学习(一)基础篇的更多相关文章

  1. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  2. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  3. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  4. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  5. Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作

    目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...

  6. opencv学习之基础

    前段时间一直在钻研深度学习中的卷积神经网络,其中的预处理环节可以说非常关键,主要就是对图片和视频进行处理.而图像处理就涉及到图形学和底层技术细节,这是一个比较精深和专业的领域,假设我们要从头开始做起, ...

  7. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  8. Java学习路线-基础篇!

    下面以黑马程序员Java学院的学习路线为例,进行一次史无前例的剖析,我会采取连载的形式,细致的讲解零基础的人怎么学习Java.先看下Java在基础阶段的知识点路线图. 内容多吗?不要被吓到了,知识点剖 ...

  9. 一步步学习javascript基础篇(8):细说事件

    终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋.可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了.今天我们就来好好分析下这个高大上的东西. 可以说,如果没有事件我们的页面就只能 ...

  10. 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)

    上一篇介绍了对象创建的几种基本方式,今天我们看分析下对象的继承. 一.原型链继承 1.通过设置prototype指向“父类”的实例来实现继承. function Obj1() { this.name1 ...

随机推荐

  1. sparkStreaming 与fafka直接方式 进行消费者偏移量的保存如redis 里面 避免代码改变与节点重启后的数据丢失与序列化问题

    import java.util import kafka.common.TopicAndPartition import kafka.message.MessageAndMetadata impor ...

  2. php 数组数字 补零

    $hour_list = range(0,24); foreach($hour_list as $key=>$val){ $hour_list[$key] = str_pad($val, 2, ...

  3. Dijkstra双栈算术表达式求值

    在看algs4的时候偶然发现了这个算法,又回顾了一遍当时数据结构课程里讲过的知识,当时很不在意.迟早是要还的,哎 用python实现了,比较麻烦的是我现在没有解决bash传参的问题,''(" ...

  4. [c/c++] programming之路(24)、字符串(五)——字符串插入,字符串转整数,删除字符,密码验证,注意事项

    1.将字符串插入到某位置(原字符串“hello yincheng hello cpp hello linux”,查找cpp,找到后在cpp的后面插入字符串“hello c”) 需要用到strstr字符 ...

  5. Bootstrap3基础 table-striped 表格实现隔行换色(浅灰色与白色交替)

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  6. TabBar + TabBarView导航风格

    import 'package:flutter/material.dart'; import 'News.dart'; import 'Video.dart'; import 'Chat.dart'; ...

  7. python学习-----协程

    一.协程的引入 对于单线程下,我们不可避免程序中出现io操作,但如果我们能在自己的程序中(即用户程序级别,而非操作系统级别)控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另外一个任务去计算, ...

  8. 利用iframe实现无刷新提交

    服务器里边:

  9. MongoDB学习笔记——数据库的创建与初始

    Part1:MongoDB与SQL的概念对比 图片来源--菜鸟教程 Part2:MongoDB安装地址 直接下载地址:戳这里 备用地址:戳这里 通过备用地址(官网)下载时,要注意下面这个地方 Part ...

  10. python的闭包与延时绑定问题

    起源于一道面试题... def mul(): return [lambda x : i*x for i in range(4)] print([m(2) for m in mul()]) # outp ...