目标 在本章中,我们将学习查找和绘制2D直方图.这将在以后的章节中有所帮助. 介绍 在第一篇文章中,我们计算并绘制了一维直方图. 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值. 但是在二维直方图中,您要考虑两个特征. 通常,它用于查找颜色直方图,其中两个特征是每个像素的色相和饱和度值. 已经有一个python示例(samples / python / color_histogram.py)用于查找颜色直方图. 我们将尝试了解如何创建这种颜色直方图,这对于理解诸如直方图反向投影之类…
直方图概念 图像的构成是有像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图).所谓直方图就是对图像的中的这些像素点的值进行统计,得到一个统一的整体的灰度概念.一般情况下直方图都是灰度图像,直方图x轴是灰度值(一般0~255),y轴就是图像中每一个灰度级对应的像素点的个数.直方图的好处就在于可以清晰了解图像的整体灰度分布,这对于后面依据直方图处理图像来说至关重要. 统计直方图 Opencv给我们提供的函数是cv2.calcHist(),该函数有5个参数: hist = cv2.cal…
学习目标: 学习不同的形态学操作,例如腐蚀,膨胀,开运算,闭运算等 我们要学习的函数有: cv2.erode(), cv2.dilate(), cv2.morphologyEx()等 原理简介: 形态学操作是根据图像形状进行的简单操作.一般情况下对二值化图像进行的操作.需要输入两个参数,一个是原始图像,第二个被称为结构化元素或核,它是用来决定操作的性质的.两个基本的形态学操作是腐蚀和膨胀.他们的变体构成了开运算,闭运算,梯度等. 参考文献:文献一 . 文献二 定义结构体元素: 形态学处理的核心就…
什么是轮廓? 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用.谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用边缘特征可以区分脸和手,而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓. 为了准确,要使用二值化图像.需要进行阀值化处理或者Canny边界检测. 查找轮廓的函数会修改原始图像.如果之后想继续使用原始图像,应该将…
卷积 什么是二维卷积呢?看下面一张图就一目了然:         卷积就是循环对图像跟一个核逐个元素相乘再求和得到另外一副图像的操作,比如结果图中第一个元素5是怎么算的呢?原图中3×3的区域与3×3的核逐个元素相乘再相加:1×1 + 2×0 + 1×0 + 0×0 + 1×0 + 1×0 + 3×0 + 0×0 + 2×2 = 5.算完之后,整个框再往右移一步继续计算,横向计算完后,再往下移一步继续计算-- padding 不难发现,用3×3的核对一副6×6的图像进行卷积,得到的是4×4的图,图…
本章将讲解如何实现二维码扫描的功能 首先在github上下载ZBar SDK地址https://github.com/bmorton/ZBarSDK 然后将如下的相关类库添加进去 AVFoundation.framwork, CoreMedia.framework, CoreVideo.framework, libiconv.dylib 和libzbar.a 接下来首先在.h文件中引用 #import "ZBarSDK.h" 同时添加代理 ZBarReaderDelegate 然后在.…
参考文献 目标 学习图像金字塔 学习函数cv2.pyrUp()和cv2.pyrDown() 原理 当我们需要将图像转换到另一个尺寸的时候, 有两种可能,一种是放大图像,另一种是缩小图像.尽管在Opencv几何变换中学到了resize()函数,不过使用图像金字塔来做图像缩放也是视觉运用中广泛应用的一项技术. 一般来说我们操作的图像是具有固定分辨率的,但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理(尤其是在我们需要提取图像特征的时候).这个时候我们需要创建一组新的图像,这些图像是具有…
简介 Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法,它是由很多步构成的算法. 最优边缘检测的三个主要评价标准: 低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报. 高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近. 最小响应: 图像中的边缘只能标识一次. 算法过程 1.噪声去除,可使用5x5的高斯滤波器; 2.计算图像梯度,这里使用Sobel算子; 相同 3.非极大值抑制,在…
CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方式功能最强大,无论是前台还是后台只要这个字段有变化就会触发这里的事件. 2. 纯js Xrm.Page.getAttribute("new_actual_unit_price").addOnChange(function () { calculateExpense("new_ac…
上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数可以多选或全选:动态地显示列,列不是固定的:根据某一字段的值来动态地显示整行字体的颜色. 下面介绍详细的方法: 一.动态参数.参数多选全选 动态参数: 首先定义一个Dataset: SELECT DISTINCT new_countryId, new_codename AS name FROM ne…