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是一个专业的图像处理库,里面有非常多基础函数能 ...
随机推荐
- 《剑指offer》包含min函数的栈
一.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.输入描述 输入栈 三.输出描述 最小值 四.牛客网提供的框架 class Solution { public: ...
- codeforces 544 D Destroying Roads 【最短路】
题意:给出n个点,m条边权为1的无向边,破坏最多的道路,使得从s1到t1,s2到t2的距离不超过d1,d2 因为最后s1,t1是连通的,且要破坏掉最多的道路,那么就是求s1到t1之间的最短路 用bfs ...
- OGG切换步骤
步骤描述 提前准备好切换方案:以及其他相关人员的配合 切换至容灾数据库: (1)停止前端业务,确认目标端数据已经追平 (2)数据校验,确认数据一致 (3)停止生产库OGG进程(停止后可以直接删除) ( ...
- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat(复制)
jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程 ...
- NodeJS学习笔记 进阶 (8)express+morgan实现日志记录(ok)
个人总结:这篇文章讲解了Express框架中日志记录插件morgan的示例.读完这篇文章需要10分钟 摘选自网络 章节概览 morgan是express默认的日志中间件,也可以脱离express,作为 ...
- 免费录屏软件之OBS Studio
好久没有再博客活动啦,今天给大家推荐一下录屏软件吧!首先我个人最喜欢的OBS Studio就说说它吧 1.免费.开源.功能强大.易上手 下面是下载地址: 官网下载 : https://ob ...
- Win 7系统倒计时!
3月25日消息,近日微软已经开始通知当前正在使用Windows 7的用户,该操作系统“接近尾声”.微软表示计划在2020年1月14日终止对Windows 7的所有支持.但结束Windows 7似乎并不 ...
- tload---显示系统负载
tload命令以图形化的方式输出当前系统的平均负载到指定的终端.假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形. 语法 tload(选项)(参数) 选项 -s:指定闲时的刻度: - ...
- Spring拦截器 /* 和 /** 的区别
SpringMVC 拦截器拦截 /* 和 /** 的区别: /* : 匹配一级,即 /add , /query 等 /** : 匹配多级,即 /add , /add/user, /add/user/u ...
- 【Henu ACM Round#19 A】 Vasya the Hipster
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题. 两个一起用->min(a,b); 剩下的除2加上去就好 [代码] #include <bits/stdc++. ...