一.霍夫变换简介 参考http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm 二.HoughLines()函数详解 该函数接受的输入矩阵只能是8位单通道的二值化灰度图. 三.代码及结果分享 #include<opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; void myHough(Mat src, Mat dst) { vec…
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对于三通道的RGB图像则为: 知道了排列方式之后我们来讨论一下访问图像像素常用的三种方式: 1.使用指针访问: 2.使用迭代器访问: 3.使用动态地址访问: 为了比较一下三种方式的效率,我们介绍两个函数来统计一下每种方式所需的时间. int64 getTickCount()函数:返回CPU自某个时间(…
霍夫线变换的原理 一条直线在图像二维空间可由两个变量表示,有以下两种情况: ① 在笛卡尔坐标系中:可由参数斜率和截距(k,b)表示. ② 在极坐标系中:可由参数极经和极角(r,θ)表示. 对于霍夫线变换,我们将采用第二种方式极坐标系来表示直线,因此直线的表达式可为: 化简便可得到: 对于(x0,y0),我们可以将通过这一点的所有直线统一定义为: 这就意味着每一对  代表一条通过点  的直线. 对于一个给定点   ,我们可以在直角坐标系中,绘出所有通过它的直线(θ 为 x 轴,r 为 y 轴).最…
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)> Introduction to programming with OpenCV OpenCV编程简单介绍 Gady Agam Department of Computer Science January 27, 2006 Illinois Institute o…
我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方式:at<typename>(i,j) Mat类提供了一个at的方法用于取得图像上的点,它是一个模板函数,可以取到任何类型的图像上的点.下面我们通过一个图像处理中的实际来说明它的用法. 在实际应用中,我们很多时候需要对图像降色彩,因为256*256*256实在太多了,在图像颜色聚类或彩色直方图时,…
滤波实际上是信号处理里的一个概念,而图像本身也可以看成是一个二维的信号.其中像素点灰度值的高低代表信号的强弱. 高频:图像中灰度变化剧烈的点. 低频:图像中平坦的,灰度变化不大的点. 根据图像的高频与低频的特征,我们可以设计相应的高通与低通滤波器,高通滤波可以检测图像中尖锐.变化明显的地方:低通滤波可以让图像变得光滑,滤除图像中的噪声. 下面我们来看一下OpenCV中的一些滤波函数: 一.低通滤波 1,blur函数 这个函数是一个平滑图像的函数,它用一个点邻域内像素的平均灰度值来代替该点的灰度.…
正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要先提取图像中皮肤区域来缩小人脸的检测范围,这一般获得皮肤的颜色范围还需要定义阈值并不断的调整,实际中参数太多而不容易控制. 这里我们就可以考虑用直方图的反射映射. 1,收集人脸皮肤样本. 2,拼合样本并计算其颜色直方图. 3,将得到的样本颜色直方图反射映射到待检测的图片中,然后进行阈值化即可. 这里…
一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征.在实际工程中,图像直方图在特征提取.图像匹配等方面都有很好的应用. 二.利用OpenCV计算图像的直方图 OpenCV中计算图像直方图像函数是calcHist,它的参数比较多,下面分析一下它的接口和用法. void calcH…
      首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址:http://blog.csdn.net/column/details/opencv-manual.html 2:部分OpenCV的函数解读和原理解读 作者:梦想腾飞数量:20篇博文网址:http:/…
再更一发好久没更过的OpenCV,不过其实写到这个部分对计算机视觉算法有所了解的应该可以做到用什么查什么了,所以后面可能会更的慢一点吧,既然开了新坑,还是机器学习更有研究价值吧... 图像在内存中的存储方式 灰度图像 RGB图像,矩阵的列会包含多个子列 因为内存足够大,可以实现连续存储,因此,图像中的各行就能一行一行地连接起来,形成一个长行.连续存储,有助于提高图像扫面速度,可以使用isContinuous()来判断矩阵是否是连续存储. 颜色空间缩减 对于三通道图像,一个像素对应的颜色有一千六百…
目的 我们将探索以下问题的答案: 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 这里我们测试的,是一种简单的颜色缩减方法.如果矩阵元素存储的是单通道像素,使用C或C++的无符号字符类型,那么像素可有256个不同值.但若是三通道图像,这种存储格式的颜色数就太多了(确切地说,有一千六百多万种).用如此之多的颜色可能会对我们的算法性能造成严重影响.其实有时候,仅用这些颜色的一小部分,就足以达到同样效果. 这种情…
我门要对某个目录下所有图像文件进行统一处理,如果图像的数量过多,那么手动地一张张处理就会显得有些麻烦.本文使用OpenCV和bash来完成我们指定的任务. 任务 将目录A下的所有统一格式的jpg图像变成统一尺寸的图像,输出到目录B中.A目录下图像的宽度和高度需要去掉最后一列.最后一行,并且使得输出图像的高度小于宽度. 技术 OpenCV读取图像:访问图像中的元素:OpenCV写图像到磁盘. BASH扫描每个输入图像:确定输出图像名称. OpenCV对图像进行处理 源代码如下: #include…
反向投影: #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; #define WINDOW_NAME "效果图" Mat src, hsv, hue; Mat temp, temp_hsv, temp_hue; ;//直方图组距 void on_BinChange(int, void*); int main(int argc, ch…
原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的昆虫图片数据集了,新图片中很多图片很大,但是图片中的昆虫却很小,所以我就想着先处理一下图片,把图片中的昆虫裁剪下来,这样除去大部分无关背景,应该可以提高识别率. 原图片举例(将红色矩形框部分裁剪出来)):  step1:加载图片,转成灰度图 image = cv2.imread("353.jpg&q…
本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-immagini-da-opencv-in-una-gui-con-qt-seconda-parte/ 在第一部分教程之后,我们建立了一个Qt Widget在GUI中显示OpenCV图像,接下来我们要看看如何使用它. 现在我们建立一个简单的应用来绘制从网络摄像头中获取的流媒体视频,这是每一个OpenCV应…
转自: OpenCV 教程 使用 图像金字塔 进行缩放 图像金字塔是视觉运用中广泛采用的一项技术.一个图像金字塔是一系列图像的集合 - 所有图像来源于同一张原始图像 - 通过梯次向下采样获得,直到达到某个终止条件才停止采样.有两种类型的图像金字塔常常出现在文献和应用中: 高斯金字塔(Gaussian pyramid): 用来向下采样 拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔低层图像重建上层未采样图像 高斯金字塔 每一层都按从下到上的次序编号, 层级  (表示为  ,尺…
我门要对某个文件夹下全部图像文件进行统一处理,假设图像的数量过多.那么手动地一张张处理就会显得有些麻烦.本文使用OpenCV和bash来完毕我们指定的任务. 任务 将文件夹A下的全部统一格式的jpg图像变成统一尺寸的图像,输出到文件夹B中.A文件夹下图像的宽度和高度须要去掉最后一列.最后一行,而且使得输出图像的高度小于宽度. 技术 OpenCV读取图像:訪问图像中的元素.OpenCV写图像到磁盘. BASH扫描每一个输入图像:确定输出图像名称. OpenCV对图像进行处理 源码例如以下: #in…
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993 工程源码GitHub: yhlleo/SuperpixelRegionFill 抠取图像区域的一个小demo,借助图像超像素分割的方法,将图像成子分块,再利用种子填充算法,选取子块区域. 超像素分割方法,采用论文 SEEDS: Superpixels Extracted via Energy-Driven Sampling…
Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生成对图像2的映射图像 4. 图像2拼接到映射图像上,完成拼接 过程1.2.3没啥好说的了,关键看看步骤4中的拼接部分.这里先采用比较简单一点的拼接方式来实现: 1. 找到图像1和图像2中最强的匹配点所在的位置 2. 通过映射矩阵变换,得到图像1的最强匹配点经过映射后投影到新图像上的位置坐标 3. 在…
我们经常会将某种尺寸的图像转化为其他尺寸的图像,如果需要放大或者缩小图像的尺寸,在 OpenCV 中可以使用如下两种方法: resize 函数,最直接的方法. pyrUp 和 pyrDown 函数,即图像金字塔相关的两个函数,对图像进行向上采样和向下采样的操作. pyrUp 和 pyrDown 其实和专门用于放大缩小图像尺寸的 resize 在功能上差不多,批着图像金字塔的皮,说白了还是对图像进行放大和缩小操作. 图像金字塔 一幅图像的金字塔是一系列以金字塔形状排列,分辨率逐渐降低且源于同一张原…
参考文献 目标 学习图像金字塔 学习函数cv2.pyrUp()和cv2.pyrDown() 原理 当我们需要将图像转换到另一个尺寸的时候, 有两种可能,一种是放大图像,另一种是缩小图像.尽管在Opencv几何变换中学到了resize()函数,不过使用图像金字塔来做图像缩放也是视觉运用中广泛应用的一项技术. 一般来说我们操作的图像是具有固定分辨率的,但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理(尤其是在我们需要提取图像特征的时候).这个时候我们需要创建一组新的图像,这些图像是具有…
1.图像的读.显示和保存操作 import cv2 img = cv2.imread('filename',0); cv2.imshow('name',img); k=cv2.waitKey(0); if k==27: cv2.destroyAllWindows(); elif k==ord('s'): cv2.imwrite('filename',img); cv2.destroyAllWindows(); cv2.imread('a',b)是图片读入函数,参数a是图片的存放路径,b是读取的方…
在图像处理中,我们经常需要处理带透明通道的图片,比如为图片或视频添加水印,为图片或视频添加字幕.贴图等.然而,我们的素材图片未必总是带有透明通道.比如,素材的背景本该透明的地方,却是黑色和白色.有时,我们甚至需要让素材本身有图像的部分半透明.接下来,我将介绍两个方法,一种是使用opencv内置方法,另一种是自己写代码,来为图像添加透明通道. 1.首先,是opencv中的cvtColor方法. C++: void cvtColor(InputArray src, OutputArray dst, …
1,计算机眼中的图像 我们打开经典的 Lena图片,看看计算机是如何看待图片的: 我们点击图中的一个小格子,发现计算机会将其分为R,G,B三种通道.每个通道分别由一堆0~256之间的数字组成,那OpenCV如何读取,处理图片呢,我们下面详细学习. 2,图像的加载,显示和保存 我们看看在OpenCV中如何操作: import cv2 # 生成图片 img = cv2.imread("lena.jpg") # 生成灰色图片 imgGrey = cv2.imread("lena.j…
在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比如两幅图像可以相加,相减,相乘,相除,位运算,平方根,对数,绝对值等:图像也可以放大,缩小,旋转,还可以截取其中的一部分作为ROI(感兴趣区域)进行操作,各个颜色通道还可以分别提取对各个颜色通道进行各种运算操作.总之,对图像可以进行的算术运算非常的多.这里先学习图片间的数学运算,图像混合,按位运算.…
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面主要学习图像灰度化的知识,结合OpenCV调用 cv2.cvtColor()函数实现图像灰度化,使用像素处理方法对图像进行灰度化处理. 1.  图像灰度化 1.1  图像灰度化原理 图像灰度化是将一幅彩色图像转换为灰度化图像的过程.彩色图像通常包括R.G.B三个分量,分别显示出红绿蓝等各种颜色,灰度…
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 本节学习图像金字塔,图像金字塔包括高斯金字塔和拉普拉斯金字塔.它是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构.简单来说,图像金字塔就是用来进行图像缩放的. 1,图像金字塔 图像金字塔是指一组图像且不同分辨率的子图集合,它是图像多尺度表达的一种,以多分辨…
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1,简单几何图像绘制 简单几何图像一般包括点,直线,矩阵,圆,椭圆,多边形等等. 下面学习一下 opencv对像素点的定义.图像的一个像素点有1或3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不同的颜色. 其实有了点才能组成各种多边形,才能对多边形进行轮廓检测,所以下面先练…
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1,如何提高图像像素 对曝光过度或者逆光拍摄的图片可以通过直方图均衡化的方法用来增强局部或者整体的对比度. 对于相机采集的原始图像经常会出现一种现象,即图像所有像素的灰度值分布不均匀,而是集中在某一特定的小区域,导致图像中的所有信息的灰度值都很接近,即对比度差,很难从图像中分辨出某一特征的信息.而质量较…
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 准备:图像转数组,数组转图像 将RGB图像转换为一维数组的代码如下: # 图像二维像素转换为一维 img = cv2.imread(filename=img_path) data = img.reshape((-1, 3)) data = np.float32(data) print(img.shape…