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 在数 ...
随机推荐
- CentOS下yum安装LAMP
1. 用yum安装Apache,Mysql,PHP. 1.1安装Apache yum install httpd httpd-devel 安装完成后,用/etc/init.d/httpd start ...
- ifconfig: command not found 如何解决?
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) 1 echo $PATH 解决方案1:先看看是 ...
- 《learning hard C#学习笔记》读书笔记(20)异步编程
20.1 什么是异步编程异步编程就是把耗时的操作放进一个单独的线程中进行处理. 20.2 同步方式存在的问题 namespace 异步编程 { public partial class For ...
- Device Tree(二):基本概念
转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...
- Java中的private protected public和default的区别
转至:http://blog.sina.com.cn/s/blog_74c571240101jaf5.html 类内部 本包 子类 外部包 public √ √ √ √ pro ...
- 【leetcode】ZigZag Conversion
题目简述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows ...
- EF for MySql 开发配置手册
执行MySQL安装程序,安装MySQL For Visual Studio和Connector/NET 执行命令: Install-Package EntityFramework Install-Pa ...
- 安装Kudu
1.默认安装好yum2.需以root身份安装3.安装ntp yum install ntp -y4.启动ntp /etc/init.d/ntpd start|stop|restart5.添加安装包yu ...
- [leetcode] 题型整理之图论
图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...
- Go语言 模板的使用(一)
使用Parse package main import ( "html/template" "net/http" ) func SayHello(w http. ...