
OpenCV学习笔记
Joeyos
https://joeyos.github.io
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenCV学习之椭圆曲线拟合
程序首先发现图像的轮廓,然后用椭圆逼近它。//椭圆曲线拟合#include "cv.h"#include "highgui.h"int slider_pos = 70;IplImage *image02 = 0, *image03 = 0, *image04 = 0;void process_image(int h);int main(int argc, char** argv){原创 2017-08-04 16:18:03 · 1548 阅读 · 0 评论 -
OpenCV学习之Hough变换检测直线
Hough变换Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。转换公式p=x*cos(a)+y*sin(a)=Asin(a+b)步骤Canny边缘检测Hough变换画直线//Hough变换检测直线#原创 2017-08-04 15:05:33 · 660 阅读 · 0 评论 -
OpenCV学习之直方图均衡化
直方图均衡化 如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。//直方图均衡化#include "cv.h"#incl原创 2017-08-04 13:47:01 · 383 阅读 · 0 评论 -
OpenCV学习之图像的直方图
灰度直方图的定义灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。数据结构typedef struct CvHistogram { int type; CvArr* bins; //存放每个灰度级数目的数组指针 float thresh[CV_MAX原创 2017-08-04 11:59:52 · 263 阅读 · 0 评论 -
OpenCV学习之采用金字塔方法进行图像分割
//采用金字塔方法进行图像分割#include "highgui.h" #include"cv.h" #include <opencv2/legacy/legacy.hpp>void doPyrSegmentation(IplImage * src, IplImage * dst) { assert(src->width % 2 == 0 && src->height % 2原创 2017-08-04 11:18:03 · 710 阅读 · 0 评论 -
OpenCV学习之寻找轮廓实现视频流的运动目标检测
//寻找轮廓实现视频流的运动目标检测#include "cv.h"#include "highgui.h"#include "time.h"#include "math.h"#include "ctype.h"#include "string.h"const double MHI_DURATION = 0.5;const double MAX_TIME_DELTA = 0.5;co原创 2017-08-04 10:58:34 · 5323 阅读 · 2 评论 -
OpenCV学习之图像域的填充
鼠标点击图像,像Photoshop选区工具一样选区相似图像区域,进行填充颜色//图像域的填充#include "cv.h"#include "highgui.h"IplImage* color_img0;IplImage* mask;IplImage* color_img;IplImage* gray_img0 = NULL;IplImage* gray_img = NULL;int原创 2017-08-04 09:46:35 · 622 阅读 · 0 评论 -
OpenCV学习之卷积滤波
//以不同核进行卷积滤波#include "cv.h"#include "highgui.h"int main(int argc, char** argv) { IplImage* src = 0; IplImage* dst = 0; IplImage* dst2 = 0; /*float k[9] = {0, 1, 0,原创 2017-08-04 08:13:08 · 469 阅读 · 0 评论 -
OpenCV学习之形态学操作
//形态学操作#include "cv.h"#include "highgui.h"IplImage* src = 0;IplImage* dst = 0;IplConvKernel* element = 0;int element_shape = CV_SHAPE_RECT;int max_iters = 10;int open_close_pos = 0;int erode_d原创 2017-08-03 20:05:27 · 302 阅读 · 0 评论 -
OpenCV学习之Hough变换检测圆
Hough变换检测圆我们在之前利用Hough变换实现了直线的检测,因为两个特征(k,b)或者(theta,r)就能确定一条直线,所以我们的Hough空间是二维的。一个圆由3个特征组成,分别是圆心的横坐标,纵坐标,以及圆的半径,因此我们的Hough空间是三维的。圆的方程:(x-a)^2 + (y-b)^2 = r^2过一点(x0,y0),a,b,r的关系就是:(x0-a)^2 + (y0-b)^2 =原创 2017-08-04 15:51:11 · 2452 阅读 · 0 评论 -
距离变换distanceTransform应用——细化字符轮廓
距离变换distanceTransform应用——细化字符轮廓OpenCV中distanceTransform方法用于计算图像中每一个非零点距离离自己最近的零点的距离,distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上越亮的点,代表了离零点的距离越远。#include "core/core.hpp" #include "imgproc/im原创 2017-08-04 16:00:11 · 961 阅读 · 0 评论 -
距离变换distanceTransform应用——寻找图像的质心
距离变换distanceTransform应用——寻找图像的质心OpenCV中distanceTransform方法用于计算图像中每一个非零点距离离自己最近的零点的距离,distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上越亮的点,代表了离零点的距离越远。可以根据距离变换的这个性质,经过简单的运算,用于细化字符的轮廓和查找物体质心(中心)。#in原创 2017-08-04 16:05:43 · 1146 阅读 · 0 评论 -
OpenCV学习之利用级联的haar分类器寻找检测目标
利用级联的haar分类器寻找检测目标 #include "cv.h"#include "highgui.h" CvHaarClassifierCascade* load_object_detector(const char* cascade_path) { return (CvHaarClassifierCascade*)cvLoad(cascade_path);}void detect原创 2017-08-13 15:10:32 · 515 阅读 · 0 评论 -
OpenCV学习之利用Kalman滤波器跟踪一个旋转的点
利用Kalman滤波器跟踪一个旋转的点#include "cv.h"#include "highgui.h"#include <math.h> int main(int argc, char** argv) { const float A[] = { 1, 1, 0, 1 }; IplImage* img = cvCreateImage(cvSize(500, 500), 8,原创 2017-08-05 09:14:39 · 667 阅读 · 0 评论 -
OpenCV学习之利用Camshift算法进行彩色目标的跟踪
利用Camshift算法进行彩色目标的跟踪#include "cv.h"#include "highgui.h"#include <stdio.h> #include <ctype.h> IplImage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg = 0;CvHistogram *hist原创 2017-08-05 09:13:37 · 1039 阅读 · 2 评论 -
OpenCV学习之利用背景建模检测运动物体
利用背景建模检测运动物体#include "cv.h"#include "highgui.h"#include <stdio.h> int main(int argc, char** argv) { IplImage* pFrame = NULL; IplImage* pFrImg = NULL; IplImage* pBkImg = NULL; CvMat* p原创 2017-08-05 09:09:18 · 1303 阅读 · 0 评论 -
OpenCV学习之运动模板检测
运动模板检测#include "cv.h"#include "highgui.h"#include <time.h> #include <math.h> #include <ctype.h> #include <stdio.h> // 不同的跟踪参数 const double MHI_DURATION = 0.5;const double MAX_TIME_DELTA = 0原创 2017-08-05 09:11:08 · 1600 阅读 · 0 评论 -
Delaunay三角形和Voronoi划分的迭代式构造
Delaunay三角形和Voronoi划分的迭代式构造#include "cv.h"#include "highgui.h"#include <stdio.h>#include <opencv2/legacy/legacy.hpp>//opencv2添加此头文件CvSubdiv2D* init_delaunay(CvMemStorage* storage, CvRect rect)原创 2017-08-05 09:08:10 · 788 阅读 · 1 评论 -
OpenCV学习之由点集序列或者数组创建凸外形
由点集序列或者数组创建凸外形#include "cv.h"#include "highgui.h" #define ARRAY 0 int main(){ IplImage* img = cvCreateImage(cvSize(500, 500), 8, 3); cvNamedWindow("hull", 1);#if ! ARRAY CvMemStorag原创 2017-08-05 09:06:32 · 1088 阅读 · 0 评论 -
OpenCV学习之椭圆曲线拟合
程序首先发现图像的轮廓,然后用椭圆逼近它。//椭圆曲线拟合#include "cv.h"#include "highgui.h"int slider_pos = 70;IplImage *image02 = 0, *image03 = 0, *image04 = 0;void process_image(int h);int main(int argc, char** argv){原创 2017-08-05 09:04:34 · 1126 阅读 · 0 评论 -
OpenCV学习之Log-Polar极坐标变换
对于二维图形,Log-polar转换表示从笛卡尔坐标到极坐标的变化,广泛应用在计算机视觉中。此函数模仿人类视网膜中央凹视力,并且对于目标跟踪等可用于快速尺度和旋转变换不变模板匹配。本例程实现极坐标变化,并进行反变换。//Log-Polar极坐标变换#include <highgui.h> #include <cv.h> int main(int argc, char** argv){原创 2017-08-03 17:56:18 · 2169 阅读 · 1 评论 -
OpenCV学习之图像的旋转与缩放
利用公式将图形旋转,缩放。采用CvGetQuadrangleSubPix提取像素四边形,双线性插值,自动变换角度。//图像的旋转与缩放#include "cv.h"#include "highgui.h"#include "math.h"int main(int argc, char** argv) { IplImage* src = cvLoadImage("Lena.tif",原创 2017-08-03 16:54:58 · 568 阅读 · 0 评论 -
OpenCV学习之基础知识
OpenCV基础知识命名规则通用函数名cvActionTargetMod(…)Action表示核心函数,如:Set、Creat等target表示目标区域,如:轮廓、多边形Mod表示可选变种,如:变量类型通用矩阵数据类型CV_(bit_depth)(S|U|F)C(number_of_channels)S表示带符号整数U表示无符号整数F表示浮点数number_of_channels表示通原创 2017-07-30 20:05:11 · 665 阅读 · 0 评论 -
OpenCV学习之摄像头录制存储视频
从摄像头读取数据,显示视频,并保存视频#include "cv.h" #include "highgui.h" #include "iostream" using namespace std;int main(int argc, char* argv[]){ CvCapture *cap = cvCreateCameraCapture(0);//初始化相机捕获的指针原创 2017-07-30 13:52:09 · 721 阅读 · 0 评论 -
OpenCV学习之读取摄像机
#include "cv.h"#include "highgui.h"//从摄像机读入数据int main(int argc, char** argv) { cvNamedWindow("Example2_9", CV_WINDOW_AUTOSIZE); CvCapture* capture; if (argc == 1) { capture = cvC原创 2017-07-30 13:46:54 · 330 阅读 · 0 评论 -
OpenCV学习之Canny边缘检测
#include "cv.h"#include "highgui.h"//Canny边缘检测IplImage* doCanny( IplImage* in, double lowThresh, //Threshold门槛 double highThresh, double aperture) //孔洞{ if (in->nChannels != 1)原创 2017-07-30 13:44:07 · 377 阅读 · 0 评论 -
OpenCV学习之图像尺寸变换
#include "cv.h"#include "highgui.h"//尺寸变换IplImage* doPyrDown( IplImage* in, int filter = IPL_GAUSSIAN_5x5) //(img,IPL_GAUSSIAN_5×5){ // Best to make sure input image is divisible by tw原创 2017-07-30 13:41:09 · 623 阅读 · 0 评论 -
OpenCV学习之图像平滑
#include "cv.h"#include "highgui.h"//平滑变换void example2_4(IplImage* image){ cvNamedWindow("Example2_4-in", CV_WINDOW_AUTOSIZE); cvNamedWindow("Example2_4-out", CV_WINDOW_AUTOSIZE); cvSho原创 2017-07-30 13:36:39 · 316 阅读 · 0 评论 -
OpenCV学习之滚动条播放视频
#include <stdio.h>#include <iostream>#include <fstream>#include "cv.h"#include "highgui.h"//滚动条播放视频int g_slider_position = 0;CvCapture* g_capture = NULL;void onTrackbarSlide(int pos) { cvSe原创 2017-07-30 13:33:41 · 347 阅读 · 1 评论 -
OpenCV学习之播放视频
#include "highgui.h"//播放视频int main(int argc, char** argv) { cvNamedWindow("Example",CV_WINDOW_AUTOSIZE); CvCapture* capture = cvCreateFileCapture("沙画.mp4");//视频路径 IplImage* frame; whi原创 2017-07-30 13:29:04 · 429 阅读 · 0 评论 -
OpenCV学习之利用DFT计算图像的功率谱
利用DFT计算图像功率谱,程序基于OpenCV#include <cxcore.h>#include <cv.h>#include <highgui.h>// 以图像中心为原点,调整傅立叶变换图像的四个象限区,即第一和第三象限交换// 第二和第四象限交换void cvShiftDFT(CvArr * src_arr, CvArr * dst_arr ){ CvMat * tmp;原创 2017-07-31 17:44:32 · 3362 阅读 · 1 评论 -
opencv学习之数据结构与数据操作
基础结构CvPoint//CvPoint定义基于二维坐标的点typedef struct CvPoint{ int x; int y;}CvPoint;//构造函数inline CvPoint cvPoint(int x,int y);//从CvPoint2D32f转换而来inline cvPoint cvPointFrom32f(CvPoint2D32f point原创 2017-07-31 21:32:54 · 1624 阅读 · 0 评论 -
OpenCV学习之图像处理
梯度、边缘和角点 数字图像的边缘检测是图像分割、目标区域识别和区域形状提取等图像分析领域十分重要的基础,是图像识别中提取图像特征的一个重要方法。 图像边缘提取的常用梯度算子有Robert算子、Sobel算子、Prewitt算子和Krisch算子等。SobelcvSobel(src,dst,int xorder,int yorder,int size=3);//x方向差分阶数//y方向差分原创 2017-08-02 13:38:01 · 399 阅读 · 0 评论 -
OpenCV学习之角点检测
利用cvGoodFeaturesToTrack进行角点检测。 - 该函数首先用cvCornerMinEigenval计算输入图像每一个像素点的最小特征值 - 将结果存储到临时变量corner1中 - 进行非最大值抑制,仅保留3*3领域中的局部最大值 - 将小于level*max[corner1(x,y]的最小特征值排除掉 - 确保所有发现的角点之间具有足够的距离 - 最强的角点第一个保留原创 2017-08-03 16:27:29 · 400 阅读 · 0 评论 -
OpenCV学习之Canny算法边缘检测(可调阈值)
threhold1和threshold2中的小阈值用来调控边缘连接,大阈值用来控制强边缘的初始分割。Canny算法使用双阈值算法检测和连接边缘。////采用Canny算法进行边缘检测#include "cv.h"#include "highgui.h"char wndname[] = "Edge";char tbarname[] = "Threshold";int edge_thresh原创 2017-08-03 15:27:58 · 5280 阅读 · 0 评论 -
OpenCV学习之建立YAML文件描述CvFileStorage
下列代码建立YAML文件,用来描述结构CvFileStorage////YAML文件的建立#include "cxcore.h"int main(int argc, char** argv) { CvMat* mat = cvCreateMat(3, 3, CV_32F); CvFileStorage* fs = cvOpenFileStorage("example.yml",原创 2017-08-03 13:43:12 · 507 阅读 · 0 评论 -
OpenCV学习之运动分析与对象跟踪
运动分析与对象跟踪背景统计量的积累Acc 将帧叠加到累积器中SquareAcc 将输入图像的平方叠加到累积器中MultiplyAcc 将两幅输入图像的乘积叠加到累积器中RunningAvg 更新加权叠加图像运动模板UpdateMotionHistory 去掉超时的影像以更新运动历史图像CalcMotionGradient 计算运动历史图像的梯度方向CalcGlobalOrientat原创 2017-08-02 20:14:35 · 1371 阅读 · 0 评论 -
OpenCV学习之直方图匹配与平面划分
连接部件数据结构typedef struct CvConnectedComp{ double area;//连通域的面积 float value;//分割域的灰度缩放值 CvRect rect;//分割成的ROI}数据操作FloodFill 指定颜色填充一个连通域FindContours 在二值图像中寻找轮廓StartFindContours 初始化轮廓的扫描过程F原创 2017-08-02 17:24:20 · 754 阅读 · 0 评论 -
OpenCV学习之金字塔及其应用
PyrDown 使用Gaussian金字塔分解对输入图像向下采样此函数使用指定滤波器对输入图像进行卷积,然后通过去除偶数的行与列来向下采样图像。cvPyrDown(src,dst,filter=CV_GAUSSIAN_5*5);//filter卷积滤波器类型PyrUp 使用Gaussian金字塔分解对输入图像向上采样此函数在图像中插入全为零的偶数行和偶数列,然后对得到的图像使用指定的滤波器进行高斯原创 2017-08-02 15:50:54 · 290 阅读 · 0 评论 -
OpenCV学习之滤波器与彩色变换
一般来说,图像平滑主要是为了消除噪声。图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。由于图像的能量主要集中在低频部分,而噪声所在频段主要是高频部分,因此通常采用低通滤波的方法消除噪声。 图像平滑分为空域法和频域法两大类。空域法常常采用均值滤波和中值滤波。Smooth 图像平滑cvSmooth(src,dst,type,param1=3,param2=0,param3=0,param4原创 2017-08-02 15:40:39 · 374 阅读 · 0 评论