OpenCV3编程入门笔记(一)】的更多相关文章

图像载入.显示.保存函数: 1         图像载入函数:imread()   Mat imread(const string& filename, int flags=1); const string&类型的filename为载入图像的路径(绝对路径和相对路径) flags是int类型的变量,flags>0,返回一个3通道的彩色图像: flags = 0,返回灰度图像: flags < 0,返回包含Alpha通道的加载图像. flags默认值为1,可以省略对其赋值. 例如…
// asw.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat srcImage = imread("C:/Users/Administrator/Desktop/车牌识别/车牌图像库/1.jpg"); //DrawEllipse(img,(1…
腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RECT,交叉形MORPH_CROSS,椭圆形MORPH_ELLIPSE.Matlab中会有更多一点的模板. 例如: Mat element = getStructuringElement(MORPH_RECT,Size(,)); erode(srcImage,dstImage,element); im…
15     遍历图像中的像素,是先for行数后for列数的,也就是一列一列的遍历,matlab中是从1开始计数,opnecv中采用c语言的从0开始计数. 矩阵归一化:normalize()函数,参数挺多,不过大多都有默认值,不用都写出来,一般要求的图像归一化精简写法为 normalize(InputArray secImage , outputArray dstImage);一个输入,一个输出即可. 16     消除图像中的噪声成分叫做图像的平滑化或滤波操作,信号或图像的能量大部分集中在幅度…
11     绘制直线的line函数 DrawLine(Mat img, Pont start, Point end); 绘制椭圆的ellipse函数 DrawEllipse(Mat img, double angle) 其中angle为椭圆旋转角度 绘制矩形的rectangle函数 DrawRectangle 绘制原的circle函数 DrawFilledCircle(Mat img, Point center) 绘制填充的多边形的fillpoly函数 DrawPolygon(Mat img)…
---恢复内容开始--- 图像处理技术一般包括图像压缩,增强和复原,匹配.描述和识别3个部分.图像处理和计算机视觉的区别在于:图像处理侧重于“处理”图像——如增强.还原.去噪.分割等:而计算机视觉重点在于使用计算机来模拟人的视觉. OpenCV由一系列C函数和C++类构成,拥有包括500多个C函数的跨平台的中高层API.OpenCV还提供MLL机器学习库,该机器学习库主要用于统计方面的模式识别和聚类.OpenCV可用于解决如下领域的问题:人机交互.物体识别.图像分区.人脸识别.动作识别.运动跟踪…
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近期浅墨实在是有些忙,个人独立开发的3D ARPG跨平台游戏App刚刚登陆安卓平台,各大应用商店都须要上架,加之各种学业方面的事情,所以这篇文章直到如今才发出来. OK,先看看<OpenCV编程入门>这本书的封面. 和出版的第一本书<逐梦旅程>一样,这本书的封面依然是浅墨自己设计的原型和…
ZC:OpenCV3编程入门_毛星云编著_电子工业出版.pdf 1.在看到 PDF.P134(计算数组加权和:addWeighted()函数)的时候,其中讲到“当输出数组的深度为CV_32S时,这个函数就不适用了,这时就会内存溢出或输出的结果压根不对.” ZC:这里 又 不太明白 "深度"是什么感念了...("通道"的概念 倒是在本书的某处 看的比较明白了) PDF.P106 2.Pdf.P163  看到 “vector(arrays)” ZC:注意,这里 是&qu…
一.边缘检测的一般步骤 1.滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能. 2.增强 增强边缘的基础是确定图像各点领域强度的变化值.增强算法可以将图像灰度点领域强度值有显著变化的点凸显出来.在具体编程实现时,可通过计算梯度幅值来确定. 3.检测 经过增强的图像,往往领域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是要找的边缘点,所以应该采用某种方法来对这些点进行取舍.实际工程中,常用的方法是通过阈值…
一.腐蚀和膨胀 1.腐蚀和膨胀的主要功能 (1)消除噪声 (2)分割出独立的图像元素,在图像中连接相邻的元素 (3)寻找图像中的极大值或者极小值区域 (4)求出图像的梯度 2.膨胀(dilate) 膨胀就是求局部最大值的操作.从数学角度来说,就是将图像与核进行卷积,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素.这样就会使图像中的高亮区域逐渐增长. 3.腐蚀(erode) 腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作.腐蚀操作会使图像中的高亮区逐渐减小. 4.膨胀和腐…
一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用的邻域算子,输入像素加权得到输出像素: 其中权重核   为“滤波系数”.上面的式子可以简记为: 二.线性滤波 1.方框滤波(box Filter) 最简单的线性滤波是移动平均或方框滤波,用 K*K窗口中的像素值平均后输出,核函数为: 其实等价于图像与全部元素值为1的核函数进行卷积再进行尺度缩放. 下…
一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取为新值0,10~19取为10,以此类推,这样每个像素有26*26*26种可能值,比上面的可能值要小很多. 2.公式 P_New = ( P_Old / divide ) * divide   (P表示像素值) 3.处理 如果对原图像每个像素都进行上面的公式运算,运算量将非常大.可以将0~255这25…
一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.linux.Mac OS.Android.iOS等操作系统上.OpenCV用C/C++编写,轻量且高效,还支持使用C#.Ch.Ruby等编程语言,同时提供对Python.Ruby.MATLAB等语言的接口. OpenCV官方主页:http://opencv.org OpenCV Github主页:http…
把第一章的例程看完了,除了基本的操作函数,还了解了跟视频操作有关的函数,发现在自己的中心偏检测中,不仅可以处理图片,还可以对视频进行处理. 问题解决方案 1.0x7547d36f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0019ea28 处的 cv::Exception?? 解决方案:把图片放在工程文件夹里,跟cpp文件一起 2.Debug和Release用的不是同一个依赖项,需要调整:否则会出现符号集加载问题 3.fatal error C1071: 在注释中遇…
滤波 blur (均值滤波) 均值滤波是典型的线性滤波算法, 主要方法为领域平均法(即用一片图像区域的各个像素的平均值来代替原图像中的各个像素值) 缺点: 不能很好的保护图像细节, 在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊. 函数原型: void blur(InputArray src, OutputArrary dst, Size ksize , Point anchor=Point(-1, -1), int borderType = BORDER_DEFAULT) ksiz…
转自: http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的. 3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用. 下面就介绍下Android NDK的入门学习过程: 入门…
1.线程块(block)是独立执行的,在执行的过程中线程块之间互不干扰,因此它们的执行顺序是随机的 2.同一线程块中的线程可以通过访问共享内存(shared memory)或者通过同步函数__syncthreads()来协调合作. 3.cuda全称:computer union device architecture    统一计算设备架构,因此CUDA并不是 编程语言 从线程层次看: 从内存层次看: 4.CUDA提供的API主要有两种: runtime API和driver API,其中run…
排序算法一直是c语言重点,各个算法适应不用的环境,同时,在面试时,排序算法也是经常被问到的.今天我们介绍下快速排序,简称就是快排. 1.快速排序思想: 快排使用 分治法 (Divide and conquer)策略,将一个序列分为两个子序列.(快排算法中使用到了递归,对递归不太熟的,可以参考我前一篇文章).具体步骤如下: ① 从数列中挑出一个元素,称为"基准"(Pivot): ② 重新排序数列,所有元素比基准小的摆放在最前面,所有元素比基准值大的放在基准的后面(相同的数可以放在任意一边…
۞ 外部函数与内部函数 前面我们讲解了关于函数的调用都是针对同一个源文件中其他函数进行调用的,而在有些情况下,函数也可以对另外一个源文件中的函数进行调用.当一个程序由多个源文件组成时,根据函数是否能被其他源文件调用,可以将函数分为内部函数和外部函数两种类型.   出于大家可能不了解,我就画了一个程序运行的简图.大家可能会很奇怪,怎么会有多个源文件,一般我们都是只创建一个源文件,然后在里面写代码的.事实上我们可以创建多个源文件,用来把各个功能模块区分,所以我们是可以在一个源文件中调用另一个源文件中…
最近学了点opencv,买了毛星云的书,大力推荐哦. 颜色缩减,自己加了个Trackbar看起来更直观一些. 我一般自己先看一遍程序,脑子里有个大概印象了,再自己写一遍,这样出了错误会印象更深刻. 1. Mat.type( )括号不能丢 2. Mat.channels()括号不能丢 3.创建Trackbar的函数createTrackbar(TrackbarName, WINDOWNAMAE, &sliderValue, maxSliderValue,onTrackbar); 这里onTrack…
·方法一 指针访问:C操作符[ ]; ·方法二 迭代器iterator; ·方法三 动态地址计算; #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace std; using namespace cv; //使用[指针访问:C操作符[ ]]方法版的颜色空间缩减函数 void colorReduce1(Mat&a…
1. 第三部分 掌握 imgproc 组件 第六章 图像处理 6.1.线性滤波: Pdf.P170 Pdf.P171 平滑处理(smoothing)(模糊处理(bluring))-- 使用频率很高 -- 用途:较少图像上的 噪点 / 失真.降低分辨率时,平滑处理是非常好用的方法. 图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制. 消除图像中的噪声成分 叫做 图像的 平滑化 / 滤波操作.... 因此 一个能降低高频成分的滤波器就能够减弱噪声的影响. 图像滤波 目的两个:(1)…
每次处理并行任务时,如果要等待用户输入或依赖外部(如与灿亨控制器响应),就应该为类似的操作单独创建一个线程,这样我们的程序才不会挂起无响应. 静态库和动态库 静态库是指在程序运行前就编译完成的库,如#include行为: 动态库指在程序运行时进行链接的库,如user32.dll. 一.事件处理器和消息传递接口 该程序演示了一个只有关闭功能的窗口 #include <Windows.h> //处理一些视觉特效,例如窗口,控件,枚举,样式 //在创建一个应用程序之前,必须先声明一个窗口过程的原型才…
图像处理和计算机视觉的区别在于: 图像处理侧重于 "处理"图像 --- 如增强,还原,去噪,分割,等等:而计算机视觉重点在于使用计算机(也许是可移动式的)来模拟人的视觉,因此模拟菜是计算机视觉领域的最终目标…
一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我们要理解两点: a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改) 例子1: x = 1def funx():    x = 10    print(x) # 打印出10 funx()print(x) # 打印出1 例子2: x = 1def funx():    p…
一.图片基本操作 1.1 显示图片 #include <opencv2/opencv.hpp> //头文件 using namespace cv; //包含cv命名空间 void main( ) { // [1]读入一张图片,载入图像 Mat srcImage = imread("1.jpg"); // [2]显示载入的图片 imshow("[原始图]",srcImage); // [3]等待任意按键按下,正数为倒数时间,0和负数为无限 waitKey(…
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在结构化编程语言里,函数是基本的程序组成单元,一个程序由一个个函数组成: 在面向对象编程语言里,类才是程序的基本单元,方法是属于类或对象的,不能独立存在: Java语言里方法的特征主要在以下几个方面: 方法不能够独立的存在,方法只能够定义在类里面,所属与某个类或对象: 方法不能够被独立地执行,必须使用…
数据库用了很久了,但好多东西很容易忘记,这次头脑发热想起来读一遍书,做点笔记! 从第五章开始参考:<SQL Server 2005 编程入门经典>学习笔记 一.RDBMS基础:SQL Server数据库的构成 1.安装好Sql Server一定包含以下4个系统数据库: Master:此数据库保存一组特殊表(系统表),用于系统的总体控制.如:在服务器新建一个数据库,则会在Master库中sysdatabases表中会记录该信息:任意的存储过程(扩展的或系统的.同一或不同数据库的)都存储在Mast…
C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文件末尾 ios::ate 文件打开后定位到文件末尾 ios::in 打开文件用于读取 ios::out 打开文件用于写入 ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0. 关闭文件 void close(); 写入文件 使用流插入运算符 ( << ),…