opencv算法学习
1.改变图像的亮度和对比度:

算法介绍:对每一点像素值的r,g,b,值进行乘法和加法的运算。
代码使用:
for( int y = ; y < image.rows; y++ )
{
for( int x = ; x < image.cols; x++ )
{
for( int c = ; c < ; c++ )
{
new_image.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );
}
}
}
2.opencv中的傅里叶变换:
主要用途:识别图片中物体的方向。
例如:矫正图片的中文字的排列方向。
计算公式:

算法介绍:f为空间值,F为频域值
代码使用:
dft(complexI, complexI);
由于dft变换后是有实数和复数部分,所有要进一步进行处理。
3.图片的平滑处理:即模糊处理
算法介绍:通过滤波器滤掉图像中的噪点,opencv主要提供高斯,中值,双边滤波
代码使用:
/// 使用高斯滤波
if( display_caption( "Gaussian Blur" ) != ) { return ; }
for ( int i = ; i < MAX_KERNEL_LENGTH; i = i + )
{ GaussianBlur( src, dst, Size( i, i ), , );
if( display_dst( DELAY_BLUR ) != ) { return ; }
/// 使用中值滤波
if( display_caption( "Median Blur" ) != ) { return ; }
for ( int i = ; i < MAX_KERNEL_LENGTH; i = i + )
{ medianBlur ( src, dst, i );
if( display_dst( DELAY_BLUR ) != ) { return ; } }
/// 使用双边滤波
if( display_caption( "Bilateral Blur" ) != ) { return ; }
for ( int i = ; i < MAX_KERNEL_LENGTH; i = i + )
{ bilateralFilter ( src, dst, i, i*, i/ );
if( display_dst( DELAY_BLUR ) != ) { return ; } }
4.图像的腐蚀与膨胀
腐蚀:处理部分被消减了。
膨胀:处理部分被扩大了。
算法介绍:与操作的内核或者说矩(图像)进行卷积操作。
核说白了就是一个固定大小的数值数组。该数组带有一个 锚点 ,一般位于数组中央。
卷积高度概括地说,卷积是在每一个图像块与某个算子(核)之间进行的运算。
腐蚀:
erode( src, erosion_dst, element );
element: 腐蚀操作的内核。 如果不指定,默认为一个简单的
矩阵。
膨胀:
dilate( src, dilation_dst, element );
可以使用函数 getStructuringElement();指定内核的形状
5.图像的放大与缩小
算法介绍:对图像与高斯内核卷积。缩小即是对图像的4个点像素,处理为一个点的像素。一个点的像素分解为四个点的像素。
pyrUp( tmp, dst, Size( tmp.cols*, tmp.rows* );//放大
pyrDown( tmp, dst, Size( tmp.cols/, tmp.rows/ );//缩小
但是opencv中最常用的图像缩放函数是relize();
6.图像的阈值操作:
算法介绍:通过对图像进行灰度值变换后,进行的色度分离操作,可应用与颜色识别。
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
7.图像的边缘检测:sobel算法
算法介绍:因为在边缘处,像素值明显改变了,我们可以通过求导的办法,将像素值的改变体现为斜率的变化。
/// 求 X方向梯度
//Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );
Sobel( src_gray, grad_x, ddepth, , , , scale, delta, BORDER_DEFAULT );
convertScaleAbs( grad_x, abs_grad_x ); /// 求Y方向梯度
//Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );
Sobel( src_gray, grad_y, ddepth, , , , scale, delta, BORDER_DEFAULT );
convertScaleAbs( grad_y, abs_grad_y ); /// 合并梯度(近似)
addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, , grad );
8。laplace算法优化了sobel算法,加入了二阶求导
Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
9.canny最优的边缘检测算法
Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );
opencv算法学习的更多相关文章
- Opencv算法学习二
1.直方图:图片中像素值分布情况的坐标图. 直方图均衡化:按一定规律拉伸像素值,提高像素值少的点,增加原图的对比度,使人感觉更清晰的函数. equalizeHist( src, dst ); 2.ha ...
- OpenCV中Camshitf算法学习(补充)
结合OpenCV中Camshitf算法学习,做一些简单的补充,包括: 实现全自动跟随的一种方法 参考opencv中的相关demo,可以截取目标物体的图片,由此预先计算出其色彩投影图,用于实际的目标跟随 ...
- OpenCV中Camshitf算法学习
今天上午,结合OpenCV自带的camshitf例程,简单的对camshitf有了一个大致的认识和理解,现总结如下: 1:关于HSV H指hue(色相).S指saturation(饱和度).V指val ...
- OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...
- 平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三
大清早的我们就来做一个简单有趣的图像处理算法实现,作为对图像处理算法学习的开端吧.之所以有趣就在于笔者把算法处理的各个方式的处理效果拿出来做了对比,给你看到原图和各种处理后的图像你是否能够知道那幅图对 ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- PCA算法学习(Matlab实现)
PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...
- OpenCV图像处理学习笔记-Day1
OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...
- OpenCV计算机视觉学习(10)——图像变换(傅里叶变换,高通滤波,低通滤波)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 在数 ...
随机推荐
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- python之路:Day02 --- Python基础2
本节内容 1.列表操作 2.元组操作 3.字符串操作 4.字典操作 5.集合操作 6.文件操作 7.字符编码与转换 一.列表操作 定义列表 names = ['Ming',"Hua" ...
- python学习笔记(4)--函数
1.函数 函数是指将一组语句的集合通过一个名字封装起来.要想执行这个函数,只需调用其函数名即可. 函数的特性: 1.减少重复代码 2.使程序变的课扩展 3.使程序变得易维护 语法定义: def pri ...
- 【DWR系列01】-DWR简介及入门例子
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- 网站跨站点脚本,Sql注入等攻击的处理
从360安全论坛里找到的一段代码,经过整理封装,直接在站点Global.asax文件或写一个HttpModule来拦截恶意请求即可: http://bbs.webscan.360.cn/forum.p ...
- 不注册COM在Richedit中使OLE支持复制粘贴
正常情况下在Richedit中使用OLE,如果需要OLE支持复制粘贴,那么这个OLE对象必须是已经注册的COM对象. 注册COM很简单,关键问题在于注册时需要管理员权限,这样一来,如果希望APP做成绿 ...
- python 爬虫(四)
爬遍整个网络 1 当我们访问整个网络的时候,我们不可避免的会访问不同的网站,但是不同的网站会有完全不同的结构和内容... 现在一步一步的构建访问整个网络的脚本 I 从一个网站开始,每一次都爬向不同的网 ...
- 移动web端的react.js组件化方案
背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...
- SOAPUI使用教程-REST Service Mocking
REST服务模拟 REST服务模拟功能允许您创建一个REST服务模拟器-MockService . 好处 RESTMockServices可用于例如: Web服务的原型 ——几秒内从请求生成一个完整的 ...
- 导航菜单跳转后,新页面上菜单CSS选定
<div class="menu"> <ul> <li><a href="#" title="网站首页&qu ...