搜档网
当前位置:搜档网 › OpenCV统计应用-影像增强,亮度,对比实作

OpenCV统计应用-影像增强,亮度,对比实作

OpenCV统计应用-影像增强,亮度,对比实作
OpenCV统计应用-影像增强,亮度,对比实作

OpenCV统计应用-影像增强,亮度/对比实作

在一般显示屏幕以及图形处理的应用软件上,都会有一个亮度/对比的色彩(Brightness/Contrast)调整,它是属于影像增强的部份,在OpenCV里面的Sample Code里面就有这样的灰阶程序的实作,在这边就修改了OpenCV的Sample Code,来做色彩增强的亮度/对比的程序,而在一般的亮度/对比来讲亮度(Brightness)的范围为0~200而对比(Contrast)亦是0~200,它们由一条线性函数的公式所定义,对比所代表的是斜率,亮度则是偏移量,这条线性公式代表的是Look-up table的对应,它的数学式定义如下

原始的亮度对比数值范围为-100~100之间,C代表对比,B代表亮度

对于对比率(Contrast ratio)来讲,delta范围应该落在0~255,这边将对比率的公式做重新的调整

对比率代表着斜率的α值,而亮度则是决定线性公式位移的情况,也就是β值,而Y=αX+β这个线性公式它所表达的情况如下

α值的范围落在0~255之间,而它的情况如下

再来下面是用伪码的方式表达亮度/对比的算法

下面就是亮度/对比的程序了

亮度/对比实作

#include

#include

#include

int BrightnessPosition = 100;

int ContrastPosition = 100;

int HistogramBins = 64;

int HistogramBinWidth;

float HistogramRange1[2]={0,256};

float *HistogramRange[1]={&HistogramRange1[0]};

IplImage *Image1,*Image2;

CvHistogram *Histogram1;

IplImage *HistogramImage;

uchar LookupTableData[256];

CvMat *LookupTableMatrix;

IplImage *LookupTableImage;

CvPoint Point1,Point2;

void OnTrackbar(int Position)

{

int Brightness="BrightnessPosition-"100;

int Contrast="ContrastPosition" -100;

double Delta;

double a,b;

int y;

//Brightness/Contrast Formula

if(Contrast>0)

{

Delta=127*Contrast/100;

a=255/(255-Delta*2);

b=a*(Brightness-Delta);

for(int x=0;x<256;x++)

{

y=(int)(a*x+b);

if(y<0)

y=0;

if(y>255)

y=255;

LookupTableData[x]=(uchar)y;

}

}

else

{

Delta=-128*Contrast/100;

a=(256-Delta*2)/255;

b=a*Brightness+Delta;

for(int x=0;x<256;x++)

{

y=(int)(a*x+b);

if(y<0)

y=0;

if(y>255)

y=255;

LookupTableData[x]=(uchar)y;

}

}

//End

//Look up table sketch

cvSetZero(LookupTableImage);

cvNot(LookupTableImage,LookupTableImage);

Point2=cvPoint(0,LookupTableData[0]);

for(int i=0;i<256;i++)

{

Point1=cvPoint(i,LookupTableData[i]);

cvLine(LookupTableImage,Point1,Point2,CV_RGB(0,0,0),3);

Point2=Point1;

}

cvLUT(Image1,Image2,LookupTableMatrix);

//End

//Gray Level Histogram

cvCalcHist(&Image2,Histogram1);

cvNormalizeHist(Histogram1,3000);

cvSetZero(HistogramImage);

cvNot(HistogramImage,HistogramImage);

HistogramBinWidth = HistogramImage->width/HistogramBins;

for(int i=0;i

{

Point1=cvPoint(i*HistogramBinWidth,0);

Point2=cvPoint((i+1)*HistogramBinWidth,(int)cvQueryHistValue_1D(Histogram1,i)); cvRectangle(HistogramImage,Point1,Point2,CV_RGB(0,0,0),CV_FILLED);

}

//End

cvShowImage("Gray Level Histogram",HistogramImage);

cvShowImage("Brightness/Contrast",Image2);

cvShowImage("Image Enhance",LookupTableImage);

cvZero(Image2);

}

int main()

{

Image1=cvLoadImage("DarkClouds.jpg",0);

Image2=cvCloneImage(Image1);

Histogram1=cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);

HistogramImage = cvCreateImage(cvSize(320,200),8,1);

LookupTableImage=cvCreateImage(cvSize(256,256),8,3);

LookupTableMatrix=cvCreateMatHeader(1,256,CV_8UC1);

cvSetData(LookupTableMatrix,LookupTableData,0);

LookupTableImage->origin=1;

HistogramImage->origin=1;

cvNamedWindow("Brightness/Contrast",1);

cvNamedWindow("Gray Level Histogram",1);

cvNamedWindow("Image Enhance",1);

cvCreateTrackbar("brightness","Brightness/Contrast",&BrightnessPosition,200,OnTrackbar); cvCreateTrackbar("contrast","Brightness/Contrast",&ContrastPosition,200,OnTrackbar);

OnTrackbar(0);

cvWaitKey(0);

}

执行结果:

这只程序同样也是用到CvHistogram数据结构,使用到两个拉轴(Trackbar),以及Look-up table的应用,在//Brightness/Contrast Formula的批注内所包的就是亮度/对比算法伪码的实作,再来就是把它的线性系统化出来,也就是Y=αX+β的函数方程式,这个方程式,当然同等于Look up table,而之后,在把他们灰阶直方图的分布画出来,在main()里面,当然是先读取目标图片转成灰阶,初始化绘制直方图与线性系统图片的空间,创立三个窗口接口,设立两个拉轴,并且将拉轴的事件函式设定成同一个的子程序的名称.而对于影像增强(Image Enhance)这个窗口接口,它所代表的含意如下

X轴代表为是原始灰阶的输入值,而Y轴代表的是灰阶值所对应的结果,而X轴跟Y轴的范围都是0~255,而这条直线公式也会受到斜率(α)以及平移(β)的结果改面灰阶值输入以及输出的对应,它是将一张原始灰阶图片的每一个像素值做线性函式的对应,使得每个灰阶值对应出来的结果产生了变化,由下面可以知道它(LUT)对应的关系

(a)亮度条为0因此小于100的灰阶值都为0而灰阶值方图也像左偏移

(b)亮度条为100,因此大于156的灰阶值都为255,而灰阶值方图也都向右偏移

(c)对比为0,这个时候斜率α为0,因此输入的0~255的灰阶值输出都固定为128,因此整张图片都是灰阶值128的影像,而灰阶直方图则是所有数据都集中在128

(d)对比为100,这个时候斜率为255,而这样的图片又可以叫做二值化图片,因为输出结果非黑即白,而移动亮度则是在平移二值化的门坎值,由灰阶值方图可以得知,所有数据都被分开到0跟255两边

上面所表达的其实就是一种Look-up table的表达方式,藉由一个输入灰阶值的矩阵,对应岀另一个不同的灰阶值数据,因此改变了原始灰阶值的数据,而整张图片也因此产生了变化

图像处理opencv代码

#include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

OpenCV主要函数介绍

4.1 OpenCV主要函数介绍 1) cvLoadImage 从文件中读取图像 IplImage* cvLoadImage(const char* filename,int flags=CV_LOAD_IMAGE_COLOR ); 函数cvLoadImage从指定文件读入图像,返回读入图像的指针。其中filename是要被读入的文件的文件名;flags指定读入图像的颜色和深度。 2)cvSaveImage 保存图像到文件 int cvSaveImage( const char* filename, const CvArr* image ); 函数cvSaveImage保存图像到指定文件。其中filename保存文件名。image 要保存的图像。图像格式的的选择依赖于filename的扩展名,只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。 3)cvQueryFrame从摄像头或者文件中抓取并返回一帧 IplImage* cvQueryFrame( CvCapture* capture ); 函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。其中capture视频获取结构。。 4)cvCaptureFromCAM 初始化摄像头 CvCapture* cvCaptureFromCAM( int index ); 函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。 其中index要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。 5)cvHaarDetectObjects 用来检测图像中的人脸区域 CV API(CvSeq*) cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1), int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0))); 用于快速检测人脸区域,便于提取得到人脸数据。其中image 为被检图像,cascade为 haar分类器级联的内部标识形式,storage 为用来存储检测到的一

opencv函数目录-Cv图像处理

目录 1 梯度、边缘和角点 1.1 Sobel 1.2 Laplace 1.3 Canny 1.4 PreCornerDetect 1.5 CornerEigenValsAndVecs 1.6 CornerMinEigenVal 1.7 CornerHarris 1.8 FindCornerSubPix 1.9 GoodFeaturesToTrack 2 采样、插值和几何变换 2.1 InitLineIterator 2.2 SampleLine 2.3 GetRectSubPix 2.4 GetQuadrangleSubPix 2.5 Resize 2.6 WarpAffine 2.7 GetAffineTransform 2.8 2DRotationMatrix 2.9 WarpPerspective 2.10 WarpPerspectiveQMatrix 2.11 GetPerspectiveTransform 2.12 Remap 2.13 LogPolar 3 形态学操作 3.1 CreateStructuringElementEx 3.2 ReleaseStructuringElement 3.3 Erode 3.4 Dilate 3.5 MorphologyEx 4 滤波器与色彩空间变换 4.1 Smooth 4.2 Filter2D 4.3 CopyMakeBorder 4.4 Integral 4.5 CvtColor 4.6 Threshold 4.7 AdaptiveThreshold 5 金字塔及其应用 5.1 PyrDown 5.2 PyrUp 6 连接部件 6.1 CvConnectedComp

opencvVS使用说明

1.打开opencv2.4.9.exe,指定安装位置(文件解压位置),解压后包含两个文件夹build、source,build文件夹中包含静态链接库文件和动态链接库文件,source文件夹包含opencv函数的源码以及训练好的分类器以及训练好的分类器。 (1)提取build文件夹下include文件夹备用(第12步使用); (2)提取build/x86/vc10目录下的bin文件夹、lib文件夹备用。(说明:x86文件夹中链接库文件是VS默认win32平台 下32位编译器,如果设置VS编译平台为64位则需要x64 文件夹的链接库;vc10文件夹的链接库对应VS2010开发平 台,vc11未知,vc12对应VS2012及以上的开发平台) 图1 opencv解压得到的两个文件夹图2 build文件夹include 图3 build/x86/vc10文件夹下bin、lib分别存放动态静态链接库文件

图4 source文件夹中data文件夹中的haarlike级联分类器、hog分类器、lbp分类器,主要对人脸、五官、微笑、行人等做分类检测 2.打开VS,新建一个Win32控制台应用程序 3.点击下一步然后去掉预编译头,选择空项目

4.点击完成,找到解决方案管理器,右键工程名

5.配置属性->VC++目录 6.在可执行文件目录编辑输入../bin 然后点击确定

7.在包含目录分别输入../include ../include/opencv ../inclide/opencv2 然后点击确定 8.在库目录输入../lib 然后点击确定

图像管理方案计划opencv代码

/. #include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

OpenCV 说明介绍

OpenCV3.0 Overview Gary Bradski Chief Scientist, Perception and AI at Magic Leap CEO, https://www.sodocs.net/doc/806519981.html, Vadim Pisarevsky Principal Engineer, Itseez Grace Vesom Senior Engineer in 3D at Magic Leap Vincent Rabaud Perception Team Manager at Aldebaran Robotics

OpenCV at glance ?BSD license, 10M downloads, 500K+lines of code ?Huge community involvement, automated patch testing and integration process ?Runs everywhere Bindings: Python, Samples, Apps, SSE, NEON, IPP, OpenCL, CUDA, OpenCV4Tegra, … core, imgproc, objdetect … OpenCV HAL OpenCV face, text, rgbd, … OpenCV Contrib Java Solutions ?Find more at https://www.sodocs.net/doc/806519981.html,(user) ?Or https://www.sodocs.net/doc/806519981.html,(developer)

Recent Stats > 10M downloads NOTE: This is only for source forge. Many more downloads come from Git and many more come on Unix distros. ~200K downloads/month World wide Rated highly

基于opencv对图像的预处理

基于opencv 对图像的预处理 1.问题描述 本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。 2.模块划分 此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示: 图一、各个模块关系图 调用 调用 调用 调用 滑动控制模块 对比度和亮度调节模块 饱和度调节模块 缩放调节模块 旋转调节模块

滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。 3.算法设计 (1)滑动控制: 滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能; (2)对比度和亮度的调节: 对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度; (3)饱和度的调节: 饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变; (4)旋转的调节: 旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小; (5)缩放的调节: 首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子; 4.函数功能描述 (1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.sodocs.net/doc/806519981.html,/technology/computing/opencv/?软件下载: https://www.sodocs.net/doc/806519981.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

VS2010+Opencv-2.4.3的配置 攻略2

VS2010+Opencv-2.4.3的配置攻略 Opencv2.4.3在VS2008和VS2010平台上安装配置图解 1、下载软件。Opencv2.4.3可从此处下载到:https://www.sodocs.net/doc/806519981.html, 先安装VS2008或VS2010,接着把刚下载的Opencv2.4.3文件解压,建议把解压文件放在C盘,如C:\opencv,可以放在任意位置,但在下面的配置中相应把路径改下。2、设置用户变量。计算机>属性>高级系统设置>环境变量>新建,新建一个用 户变量,如变量名:Path,变量值:C:\opencv\build\x86\vc9\bin 变量值有如下选择: 32位VS2008:C:\opencv\build\x86\vc9\bin 64位VS2008:C:\opencv1\build\x64\vc9\bin 32位VS2010:C:\opencv\build\x86\vc10\bin 64位VS2010:C:\opencv\build\x64\vc10\bin

3、设置编译路径。 VS2008:工具>选项>VC++目录>平台,32位选Win32,64位则选x64,接着“在显示以下内容的目录”下拉框选择“包含文件”,点击“新行”图标,分别新建3条路径: C:\opencv\build\include C:\opencv\build\include\opencv C:\opencv\build\include\opencv2 然后选择“库文件”,新建1条路径: 32位:C:\opencv\build\x86\vc9\lib 64位:C:\opencv\build\x64\vc9\lib

opencv最基础的图像处理

openCV——几个实用函数 2010年12月20日星期一 09:18 1. cvSmooth:各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ); src 输入图像. dst 输出图像. smoothtype 平滑方法: . CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数cvIntegral 计算积分图像。 . CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1.param2). . CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 . CV_MEDIAN (median blur) - 对图像进行核大小为 param1×param1 的中值滤波 (i.e. 邻域是方的). . CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 平滑操作的第一个参数. param2 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果 param2的值为零,则表示其被设定为param1。 param3

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有sigma 计算 (以保证足够精确的操作). 函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像. 2.IplImage结构 由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。IplImage结构具体定义如下: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/

opencv应用函数

目录 1 一、简介 1.1 1、OpenCV的特点 1.1.1 (1)总体描述 1.1.2 (2)功能 1.1.3 (3)OpenCV模块 1.2 2、有用的学习资源 1.2.1 (1)参考手册: 1.2.2 (2)网络资源: 1.2.3 (3)书籍: 1.2.4 (4)视频处理例程(在/samples/c/): 1.2.5 (5)图像处理例程(在/samples/c/): 1.3 3、OpenCV 命名规则 1.3.1 (1)函数名: 1.3.2 (2)矩阵数据类型: 1.3.3 (3)图像数据类型: 1.3.4 (4)头文件: 1.4 4、编译建议 1.4.1 (1)Linux: 1.4.2 (2)Windows: 1.5 5、C例程 2 二、GUI 指令 2.1 1、窗口管理 2.1.1 (1)创建和定位一个新窗口: 2.1.2 (2)载入图像: 2.1.3 (3)显示图像: 2.1.4 (4)关闭窗口: 2.1.5 (5)改变窗口大小: 2.2 2、输入处理 2.2.1 (1)处理鼠标事件: 2.2.2 (2)处理键盘事件: 2.2.3 (3)处理滑动条事件: 3 三、OpenCV的基本数据结构 3.1 1、图像数据结构 3.1.1 (1)IPL 图像: 3.2 2、矩阵与向量 3.2.1 (1)矩阵: 3.2.2 (2)一般矩阵: 3.2.3 (3)标量: 3.3 3、其它结构类型 3.3.1 (1)点:

3.3.2 (2)矩形框大小(以像素为精度): 3.3.3 (3)矩形框的偏置和大小: 4 四、图像处理 4.1 1、图像的内存分配与释放 4.1.1 (1)分配内存给一幅新图像: 4.1.2 (2)释放图像: 4.1.3 (3)复制图像: 4.1.4 (4)设置/获取感兴趣区域ROI: 4.1.5 (5)设置/获取感兴趣通道COI: 4.2 2、图像读写 4.2.1 (1)从文件中读入图像: 4.2.2 (2)保存图像: 4.3 3、访问图像像素 4.3.1 (1)假设你要访问第k通道、第i行、第j列的像素。 4.3.2 (2)间接访问: (通用,但效率低,可访问任意格式的图像) 4.3.3 (3)直接访问: (效率高,但容易出错) 4.3.4 (4)基于指针的直接访问: (简单高效) 4.3.5 (5)基于c++ wrapper 的直接访问: (更简单高效) 4.4 4、图像转换 4.4.1 (1)字节型图像的灰度-彩色转换: 4.4.2 (2)彩色图像->灰度图像: 4.4.3 (3)不同彩色空间之间的转换: 4.5 5、绘图指令 4.5.1 (1)绘制矩形: 4.5.2 (2)绘制圆形: 4.5.3 (3)绘制线段: 4.5.4 (4)绘制一组线段: 4.5.5 (5)绘制一组填充颜色的多边形: 4.5.6 (6)文本标注: 5 五、矩阵处理 5.1 1、矩阵的内存分配与释放 5.1.1 (1)总体上: 5.1.2 (2)为新矩阵分配内存: 5.1.3 (3)释放矩阵内存: 5.1.4 (4)复制矩阵: 5.1.5 (5)初始化矩阵: 5.1.6 (6)初始化矩阵为单位矩阵: 5.2 2、访问矩阵元素 5.2.1 (1)假设需要访问一个2D浮点型矩阵的第(i, j)个单元. 5.2.2 (2)间接访问: 5.2.3 (3)直接访问(假设矩阵数据按4字节行对齐): 5.2.4 (4)直接访问(当数据的行对齐可能存在间隙时possible alignment gaps):

OpenCV图像处理篇之图像平滑

OpenCV图像处理篇之图像平滑 图像平滑算法 图像平滑与图像模糊是同一概念,主要用于图像的去噪。平滑要使用滤波器,为不改变图像的相位信息,一般使用线性滤波器,其统一形式如下: 其中h称为滤波器的核函数,说白了就是权值。不同的核函数代表不同的滤波器,有不同的用途。 在图像处理中,常见的滤波器包括: 1.归一化滤波器(Homogeneous blur) 也是均值滤波器,用输出像素点核窗口内的像素均值代替输出点像素值。 2.高斯滤波器(Guassian blur) 是实际中最常用的滤波器,高斯滤波是将输入数组的每一个像素点与高斯内核卷积将卷积和当作输出像素值。高斯核相当于对输出像素的邻域赋予不同的权值,输出像素点所在位置的权值最大(对应高斯函数的均值位置)。二维高斯函数为,

3.中值滤波器(median blur) 中值滤波将图像的每个像素用邻域(以当前像素为中心的正方形区域)像素的中值代替。对椒盐噪声最有效的滤波器,去除跳变点非常有效。 4.双边滤波器(Bilatrial blur) 为避免滤波器平滑图像,去噪的同时,使边缘也模糊,这种情况下使用双边滤波器。关于双边滤波器的解释参见 https://www.sodocs.net/doc/806519981.html,/rbf/CVonline/LOCAL_COPIES/MA NDUCHI1/Bilateral_Filtering.html 下面的程序将先给标准Lena图像添加椒盐噪声,分别使用4种不同的滤波器进行平滑操作,请注意观察不同滤波器对椒盐噪声的去噪效果! 程序分析及结果

上面程序的逻辑非常清晰: 1.读入灰度图,并添加椒盐噪声(6000个噪声点):

Opencv的基本操作

实验六 OPENCV的基本操作 张慧彬 2013-8-24 机器人研究中心

目录 一.OPENCV的基本算法及一般应用 (2) 1.从磁盘加载并在屏幕上显示图象 (2) 2.播放AVI视频 (3) 3.视频播放控制 (4) 4.载入一幅图象并进行平滑处理 (6) 二.调试OPTICAL_FLOW_DEMO.CPP程序 (7) 三.OENCV的应用之CANNY边缘检测 (8) 1. C ANNY边缘检测基本原理 (8) 2.C ANNY边缘检测流程 (8) 四.试验总结及心得 (12)

一. Opencv的基本算法及一般应用 1.从磁盘加载并在屏幕上显示图象 #include”highgui.h” int main(int argc,char** argv); { IplImage *img=cvLoadImage(agrv[1]); //将图像文件加载至内存,cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载文件的格式,。IplImage结构体将是我们在使用OpenCV时会最常用到的数据结构 cvNamedWindow(”Example 1”,CV_WINDOW_AUTOSIZE); // cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。函数的第一个参数指定了该窗口的窗口标题,cvNamedWindow()函数的第二个参数定义了窗口的属性。该参数可被设置为0(默认值)或CV_WINDOW_AUTOSIZE,设置为0时,窗口的大小不会因图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为 CV_WINDOW_AUTOSIZE时,窗口则会根据图像的实际大小自动进行拉伸或缩放,以容纳图像 cvShowImage(”Example 1”,img);// 只要有一个与某个图像文件相对应的IplImage*类型的指针,我们就可以在一个已创建好的窗口(使用cvNamedWindow()函数创建)中使用cvShowImage()函数显示该图像。cvShowImage()函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。cvShowImage()函数被调用时,该窗口将被重新绘制,并且图像也会显示在窗口中。如果该窗口在创建时被指定CV_WINDOW_AUTOSIZE标志作为cvNamedWindow()函数的第二个参数,该窗口将根据图像的大小自动调整为与图像一致。 cvWaitKey(0);// 使程序暂停,等待用户触发一个按键操作。但如果将该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。当设置该函数参数为0或负数时,程序将一直等待用户触发按键操作。

OpenCV入门教程

OpenCV 入门教程 作者:于仕琪 shiqi.yu@https://www.sodocs.net/doc/806519981.html, https://www.sodocs.net/doc/806519981.html, 2012 年 8 月 版权所有?于仕琪 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

前言 OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。很多初学者希望快速掌握OpenCV 的使用方法,但往往会遇到各种各样的困难。其实仔细分析,造成这些困难的原因有两类:第一类是C/C++编程基础不过关;第二类是不了解算法原理。解决这些困难无非提升编程能力,以及提升理论基础知识。提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。 同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。在实践中学习才是最高效的学习方式。本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数 据结构以及用法。 此外,如您发现有错误之处,欢迎来信指正。 于仕琪 深圳大学 插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的 研究生。欲了解详情可以访问深圳大学招生网https://www.sodocs.net/doc/806519981.html,/或者给我发 email。

目录 第 1 章预备知识 (5) 1.1 编程的流程 (5) 1.2 什么叫编辑 (6) 1.3 什么叫编译 (6) 1.4 什么叫连接 (7) 1.5 什么叫运行 (7) 1.6 Visual C++是什么 (8) 1.7 头文件 (9) 1.8 库文件 (10) 1.9 OpenCV 是什么 (11) 1.10 什么是命令行参数 (12) 1.11 常见编译错误 (13) 1.11.1 找不到头文件 (13) 1.11.2 拼写错误 (14) 1.12 常见链接错误 (15) 1.13 运行时错误 (17) 第 2 章OpenCV 介绍 (19) 2.1 OpenCV 的来源 (19) 2.2 OpenCV 的协议 (19) 第 3 章图像的基本操作 (21) 3.1 图像的表示 (21) 3.2 Mat 类 (23) 3.3 创建 Mat 对象 (24) 3.3.1 构造函数方法 (24) 3.3.2 create()函数创建对象 (25) 3.3.3 Matlab 风格的创建对象方法 (26)

图像处理经典算法及OpenCV程序

基于opencv的use摄像头视频采集程序 (1) 基于opencv的两个摄像头数据采集 (3) 能激发你用代码做视频的冲动程序 (6) 图像反转(就是把黑的变白,白的变黑) (11) 图像格式的转换 (12) 从摄像头或者A VI文件中得到视频流,对视频流进行边缘检测 (13) 采用Canny算子进行边缘检测 (15) 角点检测 (18) 图像的旋转加缩放(效果很拽,用地球做就像谷歌地球似的) (21) Log-Polar极坐标变换 (22) 对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算) (24) 用不同的核进行图像的二维滤波 (27) 图像域的填充 (30) 寻找轮廓实现视频流的运动目标检测(超推荐一下) (35) 采用金字塔方法进行图像分割 (40) 图像的亮度变换 (43) 单通道图像的直方图 (46) 计算和显示彩色图像的二维色调-饱和度图像 (48) 图像的直方图均匀化 (50) 用Hongh变换检测线段 (52) 利用Hough变换检测圆(是圆不是椭圆) (57) 距离变换 (59) 椭圆曲线拟合 (64) 由点集序列或数组创建凸外形 (68) Delaunay三角形和V oronoi划分的迭代式构造 (71) 利用背景建模检测运动物体(推荐) (78) 运动模板检测(摄像头) (81) 显示如何利用Camshift算法进行彩色目标的跟踪 (86) 基于opencv的use摄像头视频采集程序 准备工作:你得把opencv库装到电脑上,并把各种头文件,源文件,lib库都连到vc上,然后设置一下系统环境变量,这里这方面就不说了,好像我前面的文章有说过,不懂也可百度一下。 建立一个基于WIN32控制台的工程CameraUSB,在新建一个c++元文件,写代码: #include "cxcore.h" #include "cvcam.h" #include "windows.h" #include "highgui.h"

VS2010中应用OPENCV步骤

VS2010的MFC中应用opencv步骤 王良元2011.11.17 如下步骤前提是VC6和Opencv均已正确安装,默认opencv是装在C:\Program Files下,后面路径都是这个,如果安装到其他位置,只要改为你安装路径即可。 1、打开VS2010,新建MFC工程,命名,此处为VS2010_OPENCV,如图1 所示。 2、点击OK后,依次根据需要选择对应的形式,此处依次为基本对话框 (Dialog based)、去掉UNICODE字符集选项,默认的、静态编译(As a statically linked library),完成,则弹出基本应用程序界面,如图2所示。

3、删除文本框“TODO:在这里设置对话框”,并添加一个图片控件,选中控件,右键-》属性,将“Type”选择为框架(rectangle),将ID改为IDC_ShowImg,适当调整控件大小,添加两个按钮,一个将caption改为ReadImg,实现读入图片功能,另一个将aption改为EdgeDetect,实现边缘检测功能,如图3所示。 4、在MFC工程中添加opencv的库和头文件,在VS2010中新建工程后,在工程名上右键-》

属性-》配置属性-》VC++目录的右边分别添加包含目录和库目录,如下图所示 具体添加内容为: 头文件路径: C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\include 库文件路径: C:\Program Files\OpenCV\lib 5、在“解决方案管理器”面板点击头文件,在VS2010_OPENCVDlg.h 下加入如下代码: #include"cv.h" #include"highgui.h"

相关主题