OpenCV学习笔记
OpenCV的学习过程中的笔记
两鬓已不能斑白
这个作者很懒,什么都没留下…
展开
-
OpenCV自学笔记目录
OpenCV自学笔记目录引言:计算机视觉近年来飞速发展,出现了以OpenCV为代表的计算机视觉开源库。OpenCV为我们提供了很多图像和视频处理操作:如图像分割、人脸识别等。这一系列博文以《Learning OpenCV 3 Computer Vision with Python》、《深入理解OpenCV实用计算机视觉项目解析》、《图像处理、分析与机器视觉》等书籍为参考,记录了我在学习OpenCV原创 2017-06-24 13:33:50 · 2888 阅读 · 0 评论 -
OpenCV 自学笔记33. 计算图像的均值、标准差和平均梯度
OpenCV 自学笔记33. 计算图像的均值、标准差和平均梯度均值、标准差和平均梯度是验证图像质量的常用指标。其中:均值反映了图像的亮度,均值越大说明图像亮度越大,反之越小;标准差反映了图像像素值与均值的离散程度,标准差越大说明图像的质量越好;平均梯度反映了图像的清晰度和纹理变化,平均梯度越大说明图像越清晰;那么,如何使用OpenCV计算图像的均值、标准差和平均梯度呢?OpenCV提供了几个原创 2017-11-21 14:57:07 · 68449 阅读 · 8 评论 -
OpenCV自学笔记32. ubuntu 安装python3+opencv3的过程记录
OpenCV自学笔记32. ubuntu 安装python3+opencv3的过程记录1、安装numpysudo apt-get install python3-numpy2、安装其他依赖sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswsca原创 2017-11-14 14:59:41 · 2179 阅读 · 1 评论 -
OpenCV自学笔记29. lsd直线检测算法(未完)
lsd直线检测算法参考:http://blog.csdn.net/lien0906/article/details/384171911、lsd算法的步骤 LSD是一种直线检测分割算法,它能在线性的时间内得出亚像素级精度的检测结果。该算法被设计成可以在任何数字图像上都无需参数调节。LSD算法的步骤如下:1、图像缩放2、梯度计算3、梯度排序4、阈值检测5、区域增长6、矩形近似1、图像原创 2017-10-07 20:05:43 · 6743 阅读 · 0 评论 -
OpenCV 自学笔记30. 简单轮廓匹配的小例子
简单轮廓匹配的小例子OpenCV中提供了几个与轮廓相关的函数:findContours():从二值图像中寻找轮廓drawContours():绘制轮廓matchShape():使用Hu矩进行轮廓匹配下面是一个使用这些函数的小例子,测试图片为:test3_c.jpg如下:test4_c.jpg如下:测试代码main.cpp如下:#include <opencv2/opencv.hpp>#in原创 2017-10-15 21:32:07 · 2722 阅读 · 0 评论 -
OpenCV自学笔记28. Canny 源码解析
OpenCV Canny 源码注释与分析 1986年,John F.Canny 完善了边缘检测理论,Canny算法以此命名。 Canny 算法的步骤: 1. 使用滤波器卷积降噪 2. 使用Sobel导数计算梯度幅值和方向 3. 非极大值抑制 + 滞后阈值 在正式处理前,用高斯滤平滑波器对图像做滤波原创 2016-07-09 13:35:28 · 10611 阅读 · 6 评论 -
OpenCV自学笔记27. Hough变换:检测直线和圆
Hough变换:检测直线和圆 前言:Hough变换是一种在图像中寻找直线和圆的方法。我在实际的项目中,使用到了Hough变换检测圆,效果不错,所以写一篇文章,学习Hough变换的原理,并阅读Hough变换的源码,看看OpenCV是如何实现Hough变换的。Hough变换比较难理解,尤其是圆变换的部分,另外我写的也未必清楚,所以记录下来仅做学习、参考之用。本文的结构如下:1、Hough变换如原创 2017-09-03 21:51:05 · 7855 阅读 · 1 评论 -
OpenCV自学笔记25. 直方图均衡化
OpenCV自学笔记25. 直方图均衡化1、直方图均衡化的原理直方图均衡化往往能够使图像的对比度增强,它增强了靠近直方图极大值附近的对比度,减小了极小值附近的对比度。它的数学原理如下(摘自维基百科):跳过数学原理,其实直方图均衡化的步骤非常简单,看一个例子很容易明白。下文引用自:http://www.cnblogs.com/tianyalu/p/5687782.html,原作者写得非常清楚,所以就直原创 2017-08-09 21:59:09 · 1273 阅读 · 0 评论 -
OpenCV自学笔记26. 写一个ROI叠加的小例子
写一个ROI叠加的小例子时间紧任务重,只能抽时间写一个ROI叠加的小例子了。主要用到了addWeight()方法,它的参数如下:Parameters: src1 first input array. alpha weight of the first array elements. src2 second input array of the same size a原创 2017-08-11 15:33:26 · 845 阅读 · 0 评论 -
OpenCV自学笔记24. Raspberry pi +OpenCV 读取摄像头
Raspberry pi +OpenCV 读取摄像头在Raspberry pi上调用摄像头,读取视频流中的每一帧,并利用Canny边缘检测,提取每一帧中的边缘,最终效果如下:ReadVideo.cpp#include "opencv2/opencv.hpp"using namespace cv;int main(int, char**){ VideoCapture cap(0); // o原创 2017-08-07 13:37:04 · 3096 阅读 · 2 评论 -
linux下查看opencv版本
原文地址:http://blog.csdn.net/shaoxiaohu1/article/details/24308335我在raspberry pi下安装OpenCV,想查看版本。使用下面的命令:pkg-config --modversion opencv转载 2017-08-07 10:44:24 · 4574 阅读 · 0 评论 -
OpenCV自学笔记23. Raspberry Pi 安装OpenCV(C++)
Raspberry Pi 安装OpenCV(C++) 注:以下只是记录我在RaspberryPi 安装OpenCV的过程,不同人的环境不一样,所以安装的依赖包也可能不一样,(另外我是菜鸟,有的问题暂时也理解不了,可能有错误,望勘误)~1、安装依赖包sudo apt-get install build-essentialsudo apt-get install cmake libgtk2.0-原创 2017-08-07 11:22:33 · 5525 阅读 · 2 评论 -
OpenCV自学笔记31. Android 上使用jni和opencv 实现边缘检测和直线检测
Android 上使用jni和opencv 实现边缘检测首先来看实验效果这是在android上运行的一个小demo,使用真机调试,运行在红米Note3上。上面是原始图片,下面是边缘检测的结果图。这里的边缘检测使用OpenCV中的canny算法。下面说明如何创建这样一个项目分为以下几步:1、配置ndk开发环境2、写好make文件:Android.mk和Application.mk3、写好cann原创 2017-10-20 19:02:57 · 6605 阅读 · 10 评论 -
OpenCV 自学笔记21. RGB色彩空间和HSV色彩空间的理解
RGB色彩空间和HSV色彩空间的理解1、RGB色彩空间RGB色彩空间源于使用阴极射线管的彩色电视,RGB分别代表三个基色(R-红色、G-绿色、B-蓝色)。具体的色彩值由三个基色叠加而成,在图像处理中,我们往往使用向量表示色彩的值,如(0,0,0)表示黑色、(255, 255, 255)表示白色。255表示色彩空间被量化成255个数,最高亮度值为255(255 = 2^8 - 1,即每个色彩通道用8位原创 2017-08-02 15:40:10 · 24045 阅读 · 4 评论 -
OpenCV自学笔记17. 基于SVM和神经网络的车牌识别(一)
基于SVM和神经网络的车牌识别(一) 本系列文章参考自《深入理解OpenCV实用计算机视觉项目解析》仅作学习用途图像预处理 本篇用到的测试图片为: Step1. 首先,读入并显示图像,代码如下:string in = "images/2715DTZ.jpg"; Mat image = imread(in, IMREAD_GRAYSCALE); // IMREAD_GRAYSCAL原创 2017-07-18 22:22:03 · 15723 阅读 · 25 评论 -
OpenCV自学笔记18. 基于SVM和神经网络的车牌识别(二)
基于SVM和神经网络的车牌识别(二) 本系列文章参考自《深入理解OpenCV实用计算机视觉项目解析》仅作学习用途基于SVM的图像分类在上一篇中,我们最后得到的图像,有一定可能不是车牌,所以需要加入一个分类的程序,把车牌和非车牌分开。在书中,使用SVM实现分类的功能。 书上没有给出创建训练和测试图像数据的步骤,但是给了一个xml文件(见下图),文件中是用于训练和测试的文本数据,下面直接使用这原创 2017-07-19 12:57:53 · 5406 阅读 · 9 评论 -
OpenCV自学笔记19. 基于SVM和神经网络的车牌识别(三)
基于SVM和神经网络的车牌识别(三) 本系列文章参考自《深入理解OpenCV实用计算机视觉项目解析》仅作学习用途车牌号提取 本篇用到的原始图像为: 首先,对车牌图像用直方图均衡化处理,相当于提高了图像的对比度。// 车牌号识别Mat src = imread("2715DTZ.jpg", 0);// 直方图均衡化equalizeHist(src, src);imshow("【均原创 2017-07-19 15:32:10 · 5067 阅读 · 10 评论 -
OpenCV自学笔记20. 基于SVM和神经网络的车牌识别(四)
基于SVM和神经网络的车牌识别(四) 本系列文章参考自《深入理解OpenCV实用计算机视觉项目解析》仅作学习用途特征提取与识别 在上一篇中,我们得到了车牌的每一个数字,在本篇将对利用神经网络识别出每一个数字 Step1. 首先提取特征,特征主要包含几个部分:水平方向和竖直方向的累积直方图、以及低分辨率的图像样本 Step2. 提取特征后,我们将创建分类器,并开始训练原创 2017-07-19 19:58:12 · 5682 阅读 · 12 评论 -
OpenCV自学笔记14:Harris角点检测实例
Harris角点检测实例本节使用到的图片:# -*- coding:utf-8 -*-import cv2import numpy as np# Step1. 加载图像、转化为灰度图img = cv2.imread('images/checkerboard.jpg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray =原创 2017-07-06 17:37:33 · 1151 阅读 · 0 评论 -
OpenCV自学笔记15. waitKey() 函数的作用
OpenCV 中 waitKey() 函数的作用转自:http://blog.csdn.net/Micheal_w/article/details/41276903 函数原型为: C++: int waitKey(int delay=0) Python: cv2.waitKey([delay]) → retval C: int cvWaitKey(int delay=0 ) Python:转载 2017-07-06 18:07:33 · 2855 阅读 · 0 评论 -
OpenCV自学笔记16. 卡尔曼滤波器小例子
卡尔曼滤波器的小例子(未完)卡尔曼滤波器由Rudolf Kalman在20世纪50年代末提出的算法,在导航系统上得到了广泛的应用,据说在阿波罗登月的过程中,就使用了这种算法。对卡尔曼滤波原理的理解可见:如何通俗并尽可能详细解释卡尔曼滤波?本文不介绍卡尔曼滤波的原理,如果你想深入了解它的原理,可以参考这篇文章。本文仅介绍如何利用OpenCV中的卡尔曼滤波器,实现目标跟踪。———————————————原创 2017-07-10 18:21:48 · 3910 阅读 · 1 评论 -
OpenCV自学笔记13. 训练自己的分类器
训练自己的分类器本小节使用的图片为: 最近在项目中遇到了一个问题,需要识别图像中的红色圆形。首先尝试了Hough圆形检测,详细请见这篇文章 http://blog.csdn.net/u010429424/article/details/72989870 Hough变换的效果还可以,但是存在计算量大等问题,因此,还需要一种更为准确的方法,识别图像中的圆形。 在此前提下,我原创 2017-07-06 15:22:54 · 4693 阅读 · 3 评论 -
OpenCV学习笔记22. 以图搜图,感知Hash的原理与实现(python/c++)
以图搜图,感知Hash的原理与实现 以下内容引自百度百科: 感知哈希算法(Perceptual hash algorithm)是哈希算法的一类,主要用来做相似图片的搜索工作。图片所包含的特征被用来生成一组指纹(不过它不是唯一的), 而这些指纹是可以进行比较的。概括地讲,感知哈希算法一共分两步: 1、把图片转化为字符串 ,这个字符串就是图片的hash值,又称指纹 2、求两个字符串原创 2017-08-04 19:27:41 · 5738 阅读 · 4 评论 -
OpenCV自学笔记12. 识别图像中的红色圆形
识别图像中的红色圆形本小节用到的图像为:思路:解决这个问题的思路如下:Step1. 首先,将图片由 RGB 颜色空间转换为 HSV 颜色空间,HSV颜色空间可以更直观地反映物体的颜色,便于利用颜色进行分割。有关HSV的相关内容,见以下文章: http://blog.csdn.net/viewcode/article/details/8203728 http://blog.csdn.net/q原创 2017-06-28 15:45:15 · 25333 阅读 · 8 评论 -
CVonline: Image Databases
来自:http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htmCVonline: Image DatabasesIndex by TopicAction Databases Attribute recognitionAutonomous DrivingBiological/MedicalCamera calibrationFace and翻译 2017-05-15 16:29:37 · 69725 阅读 · 7 评论 -
转载:图像傅里叶变换
“谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。” 原文链接 http://blog.jobbole.com/70549/我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者……这篇文章的核心思想就是:要让读者在不看任何数学公式的情况下理解傅里叶分析。傅里叶分析不仅仅是一个数转载 2017-06-22 19:51:36 · 1132 阅读 · 0 评论 -
OpenCV自学笔记14:Harris角点检测实例
Harris角点检测实例本节使用到的图片:# -*- coding:utf-8 -*-import cv2import numpy as np# Step1. 加载图像、转化为灰度图img = cv2.imread('images/checkerboard.jpg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray = np.float32(g原创 2017-06-28 16:20:42 · 789 阅读 · 0 评论 -
OpenCV自学笔记10:视频中分割出圆形
import cv2import numpy as np"""Step1. read the video"""cap = cv2.VideoCapture('video/video.avi')low_range = np.array([0, 123, 100])high_range = np.array([5, 255, 255])lastX = 0lastY = 0deltaX =原创 2017-07-03 18:17:01 · 883 阅读 · 0 评论 -
OpenCV自学笔记11. 切割图片
把一张图片切割成多个小图片本小节的测试图片如下:import cv2"""把一个480 * 640的图片,按照32 * 32的大小,均分成300张小图片"""def make_neg(path): k = 0 # 图片计数用的变量 image = cv2.imread(path) # 读取图片 rows, cols, = image.shape[0:2] # 获得行数和原创 2017-07-05 10:10:07 · 3609 阅读 · 1 评论 -
OpenCV自学笔记1:Pycharm + OpenCV3 + Python3 配置记录
Pycharm + OpenCV3 + Python3 配置记录引言:OpenCV + Python是开发计算机视觉的利器,由于项目的需要,最近在Windows系统上配置了OpenCV + Python,同时使用Pycharm作为开发工具,现记录如下。 Step1. 下载并安装anaconda3Step2. 安装PycharmStep3. 根据自己的电脑版本下载opencv_python原创 2017-06-23 16:59:05 · 33961 阅读 · 19 评论 -
OpenCV自学笔记2:访问图像数据
访问图像数据引言: 由于图像在计算机中的表示是一个矩阵,因此我们时不时需要访问或修改矩阵中的数据,实现基本的图像处理。同时Python提供了一个开源计算库:numpy,可以非常方便地用于矩阵计算。# -*- coding:utf-8 -*-import cv2# imread函数用于读入一幅图像,该函数的返回值是一个矩阵image = cv2.imread('images/test.jpg')#原创 2017-06-23 20:08:45 · 1749 阅读 · 0 评论 -
OpenCV自学笔记3:Canny边缘检测
Canny边缘检测引言 OpenCV提供了Canny边缘检测函数,只用一行代码就能实现图像的边缘检测,看到这里你是不是很激动呢?—————————————————————————-Canny边缘检测实例# -*- coding:utf-8 -*-import cv2image = cv2.imread('images/test.jpg')cv2.namedWindow("Image")# Can原创 2017-06-23 20:56:20 · 2477 阅读 · 0 评论 -
OpenCV自学笔记4:轮廓检测
轮廓检测引言 在计算机视觉中,轮廓检测是一个十分重要的任务。与边缘不同,图像中的轮廓包含更多的实际意义。OpenCV提供了 findContours() 函数和 drawContours() 函数实现轮廓的检测和绘制————————————————————OpenCV轮廓检测的例子# -*- coding:utf-8 -*-import cv2# Step1. 读入图像image = cv2.i原创 2017-06-23 21:37:06 · 2973 阅读 · 0 评论 -
OpenCV自学笔记5:Hough变换检测直线和圆
Hough变换检测直线和圆引言: Hough变换被常用于检测图像中的直线和圆。其本质是将直角坐标系映射到极坐标系,有关Hough变换的原理请见这篇博文。————————————————————-Hough变换检测直线OpenCV中提供了HoughLines 和 HoughLinesP来检测直线。第一个函数使用标准的Hough变换,第二个函数使用概率Hough变换,通过计算点属于直线的概率,提高了算原创 2017-06-24 13:14:34 · 3340 阅读 · 2 评论 -
OpenCV自学笔记6. 图像分割
图像分割引言: 图像分割是图像预处理的重要步骤之一,它的主要目标是将图像划分为不同的区域,这些区域与真实世界中的物体具有一定的关联成分。图像分割的方法大体分为以下三种:基于阈值的分割、基于边缘的分割和基于区域的分割。其中基于区域的分割较为常用。OpenCV提供了 分水岭算法 和 GrabCut算法,可以快速实现图像的分割。本小节使用的测试图像为:————————————————————————–使原创 2017-06-24 20:57:18 · 18247 阅读 · 2 评论 -
OpenCV自学笔记7:人脸检测 之 静态图像中的人脸检测
人脸检测 之 静态图像中的人脸检测OpenCV为我们提供了Harr分类器。我们使用预先训练好的人脸检测器haarcascade_frontalface_default.xml就可以运行人脸检测程序。haarcascade_frontalface_default.xml是一个xml格式的文件,在文件中包括人脸各个部位的Harr特征值,如图:OpenCV已经为我们训练好了分类器,可以直接使用。# -*-原创 2017-06-25 17:34:47 · 2223 阅读 · 3 评论 -
OpenCV自学笔记8:读取视频文件
读取视频文件OpenCV提供了VideoCapture类来支持视频读/写。VideoCapture类通过read()函数来获取每一帧,即一个RGB图像。本文用到的视频traffic.flv,来源于原作者Github,地址为: https://github.com/techfort/pycv/tree/master/chapter8/surveillance_demo——————————————–O原创 2017-06-28 20:25:46 · 4747 阅读 · 1 评论 -
OpenCV自学笔记9:视频的背景分割
视频的背景分割本文用到的视频traffic.flv,来源于原作者Github,地址为: https://github.com/techfort/pycv/tree/master/chapter8/surveillance_demo OpenCV中有几种背景分割器(Background Subtractor),这里使用最常用的两种: K-Nearest (KNN) Mixture of Ga原创 2017-06-28 21:24:05 · 6174 阅读 · 1 评论 -
OpenCV鼠标修改图片透明度
最近,Boss需要我研究OpenCV,实现用鼠标修改图片的透明度,具体情况是:两张图片贴合在一起,其中一张图片a的透明度是1(完全不透明),另一张图片b的透明度是0(完全透明),鼠标点击划过的地方,将a的透明度修改为0,b的透明度修改为1,下面的程序就是用于完成这个过程。#include #include using namespace cv;#define WINDO原创 2015-07-01 10:06:40 · 2176 阅读 · 0 评论