OpenCV —— 图像处理
使用图像结构中所定义的高层处理方法(图形和视觉范畴)来完成特定任务
平滑处理 cvSmooth
处理后图像与输入图像的大小相同(不用考虑边缘)
中值滤波 CV_MEDIAN 不支持 in place 操作 , 高斯滤波 CV_GAUSSIAN 支持 in place 操作(可以设置高斯核不对称,双边滤波——高斯平滑,水彩画处理,可用于图像分割)
图像形态学
膨胀 —— 把二值图像各像素连接成分的边界扩大一层,填充边缘或像素内部的孔;使灰度图像高亮区域逐渐增长
腐蚀 —— 把二值图像各像素连接成分的边界点去掉从而缩小一层(去掉毛刺);使灰度图像高亮区减少
cvErode cvDilate
自定义核 IplConvKernel —— cvCreateStructuringElementEx()函数创建 ,由 cvReleaseStructuringElement() 函数释放
形态核与卷积核不同,不需要任何的数值填充核
更通用的形态学 —— cvMorphologyEx —— 开闭运算,形态梯度,礼帽,黑帽
开运算 —— 先腐蚀然后膨胀 (可用来统计二值图像中的区域数)
闭运算 —— 先膨胀然后腐蚀 —— 对于连通区域分析,通常先采用腐蚀或闭运算来消除纯粹由噪声引起的部分,然后用开运算来连接相邻的区域
闭运算消除了低于其临近点的孤立点,开运算消除了高于其临近点的孤立点
形态学梯度 = 膨胀 - 腐蚀 —— 对二值图像进行这一操作可将团块的边缘突出出来(描述图像亮度变化的剧烈程度)
礼帽 Top Hat = src – open(src) (开运算带来的结果是放大裂缝或是局部低亮度区域,所以礼帽操作将局部亮度极大点分割出来)
黑帽 Black Hat = close(src) – src 黑色的洞被分割出来
漫水填充算法 —— 标记或分离图像的一部分以便对其进行进一步处理
在图像上选择一个种子点,然后把临近区域所有相似点填充上同样的颜色,漫水填充的结果总是某个连续的区域
cvFloodFill 可设置掩码,cvFloodFill 不会覆盖mask的非0像素点 flags —— 算法的连通性,填充掩码图像的值,CV_FLOODFILL_FIXED_RANGE
图像尺寸调整 —— cvResize 如果源图象设置了ROI,cvResize 将会对ROI区域调整尺寸,以匹配目标图像,若目标图像设置了ROI,那么。。。。(可以选择不同的插值方式)
图像金字塔 —— 连续降采样
cvPyrDown —— 先用高斯核卷积,然后删除所有偶数行和偶数列 —— 丢失一定量信息
cvPyrUp —— 图像首先在每个维度上扩大为原来的两倍,新增的行列以0填充,然后给指定的滤波器进行卷积
图像分割 —— 快速初始分割先在金字塔高层的低分辨率图像上完成,然后逐层对分割加以优化 —— cvPyrSegmentation
由于图像金字塔各层的长和宽都必须是整数,所以起始图像的长和宽都能够被2整除,并且能够被2整除的次数不少于金字塔的总层数
CvMemStorage * storage = cvCreateMemStorage()
#include <cv.h>
#include <highgui.h> int main(int argc,char** argv)
{
IplImage *src=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_UNCHANGED);
IplImage *dst=cvCreateImage(cvSize(src->width,src->height),src->depth,src->nChannels);
CvMemStorage* storage=cvCreateMemStorage();
CvSeq* comp=NULL;
cvPyrSegmentation(src,dst,storage,&comp,,,);
int n_comp=comp->total; for (int i=;i<n_comp;i++)
{
CvConnectedComp* cc=(CvConnectedComp*)cvGetSeqElem(comp,i); // ..... 怎么处理还没想好 } cvReleaseMemStorage(&storage);
return ;
}
CvConnectedComponent —— 图像团块
area 区域面积,value 区域颜色的平均值,rect 是一个区域的外接矩形,contour 是一个指向另一个序列的指针
阈值化
cvThreshold
cvAdaptiveThreshold 大津法,OTSU —— 按图像的灰度特性,将图像分成背景和目标2部分,背景和目标之间的类间方差越大,说明构成图像的的2部分的差别越大,当部分目标错为背景或反之都会使2部分差别变小
#include <cv.h>
#include <highgui.h>
#include <math.h> IplImage *Igray=, *It=,*Iat; int main(int argc,char** argv)
{
int adaptive_method=CV_ADAPTIVE_THRESH_GAUSSIAN_C;
int threshold_type=CV_THRESH_BINARY;
int block_size=;
double offset=; Igray=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_GRAYSCALE); Iat=cvCreateImage(cvSize(Igray->width,Igray->height),IPL_DEPTH_8U,); cvAdaptiveThreshold(Igray,Iat,,adaptive_method,threshold_type,block_size,offset); cvNamedWindow("w1");
cvNamedWindow("w2");
cvShowImage("w1",Iat);
cvShowImage("w2",Igray);
cvWaitKey(); cvReleaseImage(&Iat);
cvDestroyAllWindows(); return ;
}


OpenCV —— 图像处理的更多相关文章
- OpenCV图像处理篇之边缘检测算子
OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
- Python+OpenCV图像处理(一)——读取显示一张图片
先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...
- 1.5快速上手OpenCV图像处理
在上一节中,已经完成了OPENCV的配置,在本节接触几个Opencv图像处理相关的程序,看看opencv用简洁的代码能够实现哪些有趣的图像效果. 1.第一个程序:图像显示 #include<op ...
- 《OpenCV图像处理编程实例》
<OpenCV图像处理编程实例>例程复现 随书代码下载:http://www.broadview.com.cn/28573 总结+遇到的issue解决: 第一章 初识OpenCV 1.VS ...
- OpenCV图像处理学习笔记-Day1
OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...
- OpenCV图像处理学习笔记-Day03
OpenCV图像处理学习笔记-Day03 目录 OpenCV图像处理学习笔记-Day03 第31课:Canny边缘检测原理 第32课:Canny函数及使用 第33课:图像金字塔-理论基础 第34课:p ...
- OpenCV图像处理学习笔记-Day4(完结)
OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...
- Zedboard甲诊opencv图像处理(三)
整个工程进展到这一步也算是不容易吧,但技术含量也不怎么高,中间乱起八糟的错误太烦人了,不管怎么样,现在面临了最大的困难吧,图像处理算法.算法确实不好弄啊,虽然以前整过,但都不是针对图像的. 现在的图像 ...
- 基于Opencv图像处理的时时头像採集试验
2014 4.20 近期想做一个关于图像处理的软件玩玩,可惜也没有什么特别的想法,就当玩玩好了,准备用Opencv开源库实现下简单的功能吧. Opencv是一个专业的图像处理库,里面有非常多基础函数能 ...
随机推荐
- C#派生类中使用基类protected成员的方法
我们知道C#中通过继承可以使一个具有公共数据和方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员.那么当基类成员被prot ...
- vcenter server appliance 5.5 管理中心 linux 版本的部署
本文选自通过ovf模板部署: 需要下面两个文件即可: 打开vsphere client 登录到你安装了exsi5.5的物理机上面: 点击文件---> 部署ovf模板 ---->选择你的模 ...
- UI Framework-1: UI Development Practices
UI Development Practices Guidelines Principles for developing for Chrome. These best practices cente ...
- SSD-实现
一.制作voc数据集 1.数据集文件夹 新建一个文件夹,用来存放整个数据集,或者和voc2007一样的名字:VOC2007 然后像voc2007一样,在文件夹里面新建如下文件夹: 2.将训练图片放到J ...
- HDU 4406 GPA
GPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 440664 ...
- vue28-2.0-过滤器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- snowflake算法
snowflake算法思考 缘起 为什么会突然谈到分布式唯一id呢?原因是最近在准备使用RocketMQ,看看官网介绍: 一句话,消息可能会重复,所以消费端需要做幂等.为什么消息会重复后续Rocket ...
- 深入Vue的响应式原理
工作的过程中,有时候会有数据改变但是视图没有更新的问题,作者在vue的官方文档中有提到这个问题,我来总结一下 1.vue的每个组件实例都有对象的watcher实例对象,它会在组件渲染的过程中把属性记录 ...
- CSS3侧滑导航
<!DOCTYPE> <html> <head> <meta charset="utf-8" /> <meta name=&q ...
- Microsoft office2016(专业增强版) 安装错误,报CRT(KB2999226)
对着这个错误的出现,网上有解释,这里不多说(实际是我没有找到比较靠谱的说法..),跟Window Update这个服务有关. 首先打开”Windows人为管理器”->"服务" ...