码迷,mamicode.com
首页 > 其他好文 > 详细

OpenCV —— 图像处理

时间:2014-06-25 14:45:54      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:des   style   class   blog   code   http   

使用图像结构中所定义的高层处理方法(图形和视觉范畴)来完成特定任务

平滑处理   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(0);
    CvSeq* comp=NULL;
    cvPyrSegmentation(src,dst,storage,&comp,4,200,50);
    int n_comp=comp->total;

    for (int i=0;i<n_comp;i++)
    {
        CvConnectedComp* cc=(CvConnectedComp*)cvGetSeqElem(comp,i);

        // ..... 怎么处理还没想好

    }

    cvReleaseMemStorage(&storage);
    return 0;
}

CvConnectedComponent —— 图像团块

area 区域面积,value 区域颜色的平均值,rect 是一个区域的外接矩形,contour 是一个指向另一个序列的指针

 


阈值化

cvThreshold

cvAdaptiveThreshold  大津法,OTSU —— 按图像的灰度特性,将图像分成背景和目标2部分,背景和目标之间的类间方差越大,说明构成图像的的2部分的差别越大,当部分目标错为背景或反之都会使2部分差别变小

#include <cv.h>
#include <highgui.h>
#include <math.h>

IplImage *Igray=0, *It=0,*Iat;

int main(int argc,char** argv)
{
    int adaptive_method=CV_ADAPTIVE_THRESH_GAUSSIAN_C;
    int threshold_type=CV_THRESH_BINARY;
    int block_size=9;
    double offset=5;

    Igray=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_GRAYSCALE);
    
    Iat=cvCreateImage(cvSize(Igray->width,Igray->height),IPL_DEPTH_8U,1);

    cvAdaptiveThreshold(Igray,Iat,255,adaptive_method,threshold_type,block_size,offset);

    cvNamedWindow("w1");
    cvNamedWindow("w2");
    cvShowImage("w1",Iat);
    cvShowImage("w2",Igray);
    cvWaitKey();

    cvReleaseImage(&Iat);
    cvDestroyAllWindows();

    return 0;
}

bubuko.com,布布扣

bubuko.com,布布扣

OpenCV —— 图像处理,布布扣,bubuko.com

OpenCV —— 图像处理

标签:des   style   class   blog   code   http   

原文地址:http://www.cnblogs.com/sprint1989/p/3806462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!