zoukankan      html  css  js  c++  java
  • 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(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;
    }

    dd

    ss

  • 相关阅读:
    ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 17 电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/sprint1989/p/3806462.html
Copyright © 2011-2022 走看看