精华内容
下载资源
问答
  • opencv 图像处理

    2012-05-15 15:31:53
    一本关于opencv图像处理的电子书,对于学习opencv的人很有帮助
  • opencv图像处理源码 opencv图像处理源码 opencv图像处理源码 opencv图像处理源码
  • OpenCV图像处理总结

    2018-01-17 15:44:30
    OpenCV图像处理总结(python) OpenCV图像处理总结(python) OpenCV图像处理总结(python)
  • OpenCV图像处理编程实例.pdf OpenCV图像处理编程实例.pdf OpenCV图像处理编程实例.pdf OpenCV图像处理编程实例.pdf OpenCV图像处理编程实例.pdf OpenCV图像处理编程实例.pdf OpenCV图像处理编程实例.pdf
  • OpenCV图像处理程序汇总 OpenCV图像处理程序汇总 OpenCV图像处理程序汇总
  • OpenCV图像处理

    2017-08-31 21:50:00
    任务目标:识别图像右下角的保险,即红蓝黄白绿五个小块,要求识别这五个保险是否存在,且顺序是否正确。 求各位大佬给出识别思路,谢谢!希望可以提供一些关键函数,部分或者全部代码,没有也可。
  • OpenCV的配置 使用OpenCV帮助文档 打开一幅图像 ;OpenCV 在VC6下安装与配置;OpenCV 在VC6下安装与配置;OpenCV 在VC6下安装与配置;OpenCV 在VC6下安装与配置;OpenCV 在VC6下安装与配置;OpenCV 在VC6下安装与配置;...
  • Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法 目录图像处理一、OpenCV框架与图像插值算法1.1 OpenCV简介1.2 图像插值算法1.3 resize函数1.4 代码实现 图像处理 图像处理(image processing),用计算机...
  • 基于OpenCV最新版本3.1.0详细讲述OpenCV图像处理部分内容,包括Mat对象使用、HIGHGUI使用、基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。涵盖OpenCV中图像处理部分的全部主要...
  • opencv图像处理中常用函数汇总,包括显示图像,保存图像,图像灰度化,边缘检测等函数使用方式
  • 便捷式OpenCV图像处理工具,有形态学处理,滤波,图像增强,二值化,边缘检测,滤镜效果,图像检测,图像分割等
  • OpenCV 图像处理编程实例 -源码 朱伟 赵春光
  • OpenCV图像处理基础——基于C++实现

    千人学习 2020-04-10 00:21:08
    OpenCV图像处理基础——基于C++实现版本视频培训课程概况:教程中会讲解到OpenCV的基础知识及使用方法,并基于OpenCV实现基础的图像处理算法;除此之外课程包含如下的内容: 图像颜色空间及类型转换及应用(BGR、YUV...
  • Opencv图像处理经典例图。可以作为参考。
  • OpenCV图像处理编程实例》(朱伟著)+源代码;《OpenCV图像处理编程实例》(朱伟著)+源代码
  • OpenCV图像处理编程实例》-源码-20160801

    千次下载 热门讨论 2016-08-06 12:11:52
    OpenCV图像处理编程实例》-源码,最新更新20160801,支持OpenCV3.1+VS2015,修改若干程序中错误,如遇问题欢迎反馈到zhu1988wei@163.com
  • OpenCV图像处理编程实例》以OpenCV开源库为基础实现图像处理领域的很多通用算法,并结合当今图像处理领域前沿技术,对多个典型工程实例进行讲解及实现。全书内容覆盖面广,由基础到进阶,各个技术点均提供详细的...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

    前面一篇文章介绍了数字图像处理基础知识,包括像素及常见图像分类、OpenCV配置、常见数据类型、Numpy和Matplotlib绘制、几何图形绘制等。这篇文章将介绍OpenCV图像处理入门知识、算数逻辑运算与图像融合,万字长文整理,希望对您有所帮助。 同时,该部分知识均为作者查阅资料撰写总结,并且开设成了收费专栏,为小宝赚点奶粉钱,感谢您的抬爱。如果有问题随时私聊我,只望您能从这个系列中学到知识,一起加油喔~

    展开全文
  • Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)——几何变换 Python+OpenCV图像处理(三)——彩色空间互换 目录四、图像滤波4.1 简介 四、图像滤波 4.1 简介 ...

    系列文章
    Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法
    Python+OpenCV图像处理(二)——几何变换
    Python+OpenCV图像处理(三)——彩色空间互换
    Python+OpenCV图像处理(四)——图像滤波
    Python+OpenCV图像处理(五)——图像阈值和二值化
    Python+OpenCV图像处理(六)——边缘检测


    四、图像滤波

    4.1 简介

    图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。

    4.2 图像平滑方法

    4.2.1 2D卷积

    在原理上,是采用一个卷积核与图像进行卷积,下面是一个5X5的平均滤波器,也叫做核(kernel):

    将核放在图像的一个像素上,求与邻域内(5×5)的像素和,再取平均数,用这个平均数代替该像素的值。重复以上操作直到将图像的每一个像素值都更新一遍。

    OpenCV提供的函数cv2.filter2D()可以实现这种卷积操作。

    实现

    #%%
    
    import numpy as np
    import cv2
    
    img = cv.imread('lena.jpg', 1)
    kernel = np.ones((5,5),np.float32)/25
    dst = cv.filter2D(img,-1,kernel)
    
    cv2.imshow('original', img)
    cv2.imshow('2D convolution', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    4.2.2 均值滤波

    用其像素点邻域范围内像素的平均值代替中心点像素值。这种方法可以使一幅图像模糊,去掉不相关的部分,但是它的缺点是在滤除噪声的同时也会滤掉图像的边缘信息,去失去很多细节。另外,均值滤波不能很好地去除噪声点。特别是椒盐噪声。

    3×3的滤波器如图所示:

    OpenCV中通过函数cv2.blur()或cv2.boxFilter()实现。

    实现

    #%%
    
    import cv2
    
    img = cv2.imread('lena.jpg')
    
    blur1 = cv2.blur(img,(3,3))
    blur2 = cv2.blur(img,(5,5))
    
    cv2.imshow('3*3 Mean filtering', blur1)
    cv2.imshow('5*5 Mean filtering', blur2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    4.2.3 高斯滤波

    高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用。在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声,如传统车牌识别等。

    高斯滤波对比均值滤波,其不同在于它的滤波器的模板系数随着距离模板中心的增大而减小(服从二维高斯分布),二维高斯分布为:

    OpenCV中通过函数cv2.GaussianBlur()实现,当然,如果有需要的话可以使用函数cv2.getGaussianKernel() 创建高斯内核。

    实现

    #%%
    
    import cv2
    
    img = cv2.imread('lena.jpg')
    
    # 0是指根据窗口大小,来计算高斯函数标准差
    GaussianBlur1 = cv2.GaussianBlur(img,(3,3),0)
    GaussianBlur2 = cv2.GaussianBlur(img,(5,5),0)
    
    cv2.imshow('3*3 Gaussian filtering', GaussianBlur1 )
    cv2.imshow('5*5 Gaussian filtering', GaussianBlur2 )
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    4.2.4 中值滤波

    中值滤波用测试像素周围邻域像素集中的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果非常明显。

    在OpenCV中,可以使用函数cv2.medianBlur()进行操作。

    实现

    #%%
    
    import cv2
    
    img = cv2.imread('jiazao.jpg', 0)
    
    medianBlur1 = cv2.medianBlur(img,3)
    medianBlur2 = cv2.medianBlur(img,5)
    
    cv2.imshow('original', img)
    cv2.imshow('3*3 median filtering', medianBlur1 )
    cv2.imshow('5*5 median filtering', medianBlur2 )
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    展开全文
  • OpenCV图像处理编程实例》以OpenCV开源库为基础实现图像处理领域的很多通用算法,并结合当今图像处理领域前沿技术,对多个典型工程实例进行讲解及实现。全书内容覆盖面广,由基础到进阶,各个技术点均提供详细的...
  • 基于OpenCV版本3.1.0详细讲述OpenCV图像处理部分内容,包括Mat对象使用、HIGHGUI使用、基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。涵盖OpenCV中图像处理部分的全部主要内容。...
  • Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)——几何变换 Python+OpenCV图像处理(三)——彩色空间互换 Python+OpenCV图像处理(四)——图像滤波 目录五、图像阈值和二...

    系列文章
    Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法
    Python+OpenCV图像处理(二)——几何变换
    Python+OpenCV图像处理(三)——彩色空间互换
    Python+OpenCV图像处理(四)——图像滤波
    Python+OpenCV图像处理(五)——图像阈值和二值化
    Python+OpenCV图像处理(六)——边缘检测


    五、图像阈值和二值化

    5.1 简介

    图像阈值化分割是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。

    5.2 简单阈值

    在这里,问题直截了当。对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.threshold用于应用阈值。第一个参数是源图像,它应该是灰度图像。第二个参数是阈值,用于对像素值进行分类。第三个参数是分配给超过阈值的像素值的最大值。OpenCV提供了不同类型的阈值,这由函数的第四个参数给出。通过使用cv.THRESH_BINARY类型。所有简单的阈值类型为

    对于图像阈值化分割,最简单的方法是,如果像素值高于阈值(TH),将其设为最大值,如果像素值低于阈值,则将其设为最小值。举个例子,对于像素值为0~255的图像,大于TH,设为255。小于TH,设为0。这种简单的方法也被称作二值化。在OpenCV中可以使用cv2.THRESH_BINARY实现。常用的简单阈值分割的原理图如下:

    • 二值阈值化 —— 像素值大于阈值的设为最大值,小于阈值的设为最小值
    • 反向二值阈值化 —— 像素值大于阈值的设为最小值,小于阈值的设为最大值
    • 截断阈值化 —— 像素值大于阈值的设为阈值,小于阈值的保持原来的像素值
    • 超过阈值被置0 —— 像素值大于阈值的置为0,小于阈值的保持原来的像素值
    • 低于阈值被置0 —— 像素值大于阈值的保持原来的像素值,小于阈值的置为0

    这几种简单阈值的方法对应OpenCV中的函数为:

    • cv2.THRESH_BINARY
    • cv2.THRESH_BINARY_INV
    • cv2.THRESH_TRUNC
    • cv2.THRESH_TOZERO
    • cv2.THRESH_TOZERO_INV

    这些函数都有两个返回值,第一个返回值为使用的阈值,第二个就是阀值化之后的图像了。

    实现

    #%%
    
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('lena.jpg',0)
    
    ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
    ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
    ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
    ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
    
    titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
    
    for i in range(6):
        plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')#避免灰度图彩色映射
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])#去掉刻度
    #plt.savefig("bigpic_2.png")
    plt.show()
    
    cv2.imshow('Original Image', img)
    cv2.imshow('BINARY', thresh1)
    cv2.imshow('BINARY_INV', thresh2)
    cv2.imshow('TRUNC', thresh3)
    cv2.imshow('TOZERO', thresh4)
    cv2.imshow('TOZERO_INV', thresh5)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    tips:这里不能用plt进行输出,plt输出如下图,会发现有些许偏差,偏差如上图和下图的对比,具体原因暂时未找出,找出后及时更新

    5.3 最大类间方差法(大津阈值法)

    对于图像二值化的简单阈值法,我们需要自己提供一个阈值,而大津法(OTSU)可以根据图像特性,选择最佳的阈值,故它也被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。

    它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

    应用: 是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。

    优点: 计算简单快速,不受图像亮度和对比度的影响。

    缺点: 对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。

    原理非常简单,涉及的知识点就是均值、方差等概念和一些公式推导。为了便于理解,我们从目的入手,反推一下这著名的OTSU算法。

    求类间方差:

    OTSU算法的假设是存在阈值TH将图像所有像素分为两类C1(小于TH)和C2(大于TH),则这两类像素各自的均值就为m1、m2,图像全局均值为mG。同时像素被分为C1和C2类的概率分别为p1、p2。因此就有:

    根据原文,式(4)还可以进一步变形:

    #%%
    
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('lena.jpg',0)
    # 全局阈值
    ret1,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    # Otsu阈值
    ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    
    cv2.imshow('Original Image', img)
    cv2.imshow('BINARY', th1)
    cv2.imshow('OTSU', th2)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    5.4 自适应阈值

    不管是前面的简单阈值法,还是后面的OTSU算法,但这些算法属于全局阈值法,所以对于某些光照不均的图像,这种全局阈值分割的方法会显得苍白无力,如下图:

    根据图像上的每一个小区域计算与其对应的阀值。因此在同一幅图像上的不同区域采用的是不同的阀值,从而使我们能在亮度不同的情况下得到更好的结果。
    这种方法需要我们指定三个参数,返回值只有一个。
    Adaptive Method 指定计算阀值的方法
    -cv2.ADAPTIVE_THRESH_MEAN_C:阀值取自相邻区域的平均值
    -cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阀值取自相邻区域的加权和,权重为一个高斯窗口
    Block Size 邻域大小(用来计算阀值的区域大小)
    C这就是一个常数,阀值就等于的平均值或者加权平均值减去这个常数

    #%%
    
    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('18.png',0)
    
    ret, th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    
    # Otsu阈值
    ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    
    # 11为block size,2为C值
    th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C , cv2.THRESH_BINARY,11,2 )
    th4 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C , cv2.THRESH_BINARY,11,2)
    
    titles = ['original image', 'global thresholding (v=127)', 'otus thresholding','Adaptive mean thresholding', 'adaptive gaussian thresholding']
    images = [img,th1,th2,th3,th4]
    
    for i in range(5):
        plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    #plt.savefig('duibi.png')
    plt.show()
    
    cv2.imshow('Original', img)
    cv2.imshow('BINARY', th1)
    cv2.imshow('OTSU', th2)
    cv2.imshow('ADAPTIVE_THRESH_MEAN', th3)
    cv2.imshow('ADAPTIVE_THRESH_GAUSSIAN', th4)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    展开全文
  • 使用OpenCV开发的图像处理小工具,能够实现OpenCV的相应图像处理,比如形态学处理、滤波、图像增强、二值化、边缘检测、滤镜、图像检测、图像分割等功能都能实现,是一款便捷式的图像处理工具。
  • OpenCV图像处理编程实例的全书代码,是2017年10月份的最新更新。有做仔细校正。
  • OpenCV图像处理:图像锐化操作

    千次阅读 2019-05-12 13:02:20
    17/100发布文章 博文管理我的博客退出 ...什么是指针 OpenCV入门即颠峰:使用Mat类(彩色测试) OpenCV入门即颠峰:使用Mat类(灰度测试) OpenCV入门即巅峰:Mat类的使用(彩色测试) OpenCV图像处理:图像锐化操...

    操作系统Win10

    工具:VS2019、OpenCV4.0.0

    核心算法
    saturate_cast(5 * current[j] -
    current[j - channels] - current[j + channels] -
    previous[j] - next[j])

    测试结果
    在这里插入图片描述

    测试代码
    #include <opencv.hpp>
    #include
    using namespace std;
    using namespace cv;
    void Sharpen(const Mat& src, Mat& dst)
    {
    int channels = src.channels();
    int rows = src.rows;
    int cols = src.cols;

    //创建一个与src同类型pixel同大小
    dst.create(src.size(), src.type());
    //只对第1行到rows-1行进行处理
    for (int i = 1; i < rows - 1; ++i)
    {
    //前一行的指针
    //当前行的指针
    //后一行的指针
    const uchar* previous = src.ptr(i - 1);
    const uchar* current = src.ptr(i );
    const uchar* next = src.ptr(i + 1); //取得dst第i行的指针
    uchar* output = dst.ptr(i);
    //只对第1列到cols-1行进行处理
    for (int j = channels; j < channels * (cols - 1); ++j)
    {
    //对dst的第i行锐化处理操作
    //saturate_cast像素越界处理
    //*** *** ***
    //*** *** ***
    //*** *** ***
    //(1,3)*5-(1,0)-(1,6)-(0,3)-(2,3)
    output = saturate_cast(5 * current[j] -
    current[j - channels] - current[j + channels] -
    previous[j] - next[j]);
    //output指针下移处理下一行
    output++;
    }
    }
    //还有第1、rows行,第1、cols列未处理,置0
    dst.row(0).setTo(Scalar(0));
    dst.row(rows - 1).setTo(Scalar(0));
    dst.col(0).setTo(Scalar(0));
    dst.col(cols-1).setTo(Scalar(0));
    }
    int main(int argc, char
    argv[])
    {
    Mat src_mat = imread(“C:/Users/Cocos/Desktop/1.jpg”);
    Mat dst_mat;

    if (src_mat.empty())
    {
    cout << “读取图像失败,程序退出” << endl;
    return EXIT_FAILURE;
    }
    printf(“图像分辨率:%d * %d 类型:%d\n”,
    src_mat.rows,
    src_mat.cols,
    src_mat.type());
    cout << “读取图像成功,正在处理…” << endl;
    namedWindow(“src_mat”, WINDOW_AUTOSIZE);
    imshow(“srt_mat”, src_mat);
    //用于查看处理图像所用时间
    double t = (double)getTickCount();
    Sharpen(src_mat, dst_mat);
    t = ((double)getTickCount() - t) / getTickFrequency();
    cout << “图像锐化处理成功,共花费:” << t << “s” << endl;
    namedWindow(“dst_mat”, WINDOW_AUTOSIZE);
    imshow(“dst_mat”, dst_mat);
    waitKey(0);
    return 0;
    }

    展开全文
  • 贾志刚+OpenCV图像处理教程-课程配套源代码
  • openCV图像处理实例,opencv版本2.30,在附加依赖项出添加相关lib文件,学习OPENCV很实用的
  • OpenCV图像处理-膨胀和腐蚀

    千次阅读 2019-08-06 11:27:18
    OpenCV图像处理-膨胀和腐蚀前言概念结构元素膨胀腐蚀示例 前言 本文使用的环境为:Qt5.11 + OpenCV3.4.6 环境安装参考文档:https://blog.csdn.net/z634863434/article/details/89950961 概念 假设有图像A和结构元素...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • MFC + OpenCV图像处理

    热门讨论 2011-06-27 15:03:00
    OpenCV实现的图像处理软件,实现了 图像信息(直方图,灰度图)图像的几何变换(放缩,翻转,旋转)图像增强(直方图均衡化,拉普拉斯锐化,高斯低通滤波,霍夫变换)图像复原(加噪去噪)图像分割(边缘检测,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,025
精华内容 40,010
关键字:

opencv图像处理