OpenCV学习 day4 基于OpenCV的图像处理

第六章        

        OpenCV提供了大量的功能来处理不同类型的图像处理任务,如图像滤波、几何变换、绘制、不同颜色空间的处理、图像直方图等等。

6.1图像滤波

        本节中所有的函数都是以Mat图像作为输入,并生成具有同样大小和相同通道数的Mat图像。通常滤波算法是从输入图像获取一个像素及其临近的像素,但是图像边缘的像素可能会缺少某个方向的邻近像素,所以作出假设,可能设为0或者与边界像素相等之类,用到cv::BorderTypes枚举指定。

QStringList items;

        // 常数边界模式  边界外的像素值被设置为一个特定的常数值 
    items.append("BORDER_CONSTANT");

        // 复制边界模式  边界外的像素值是图像边界像素的复制 
    items.append("BORDER_REPLICATE");

        // 反射边界模式  边界外的像素值是图像边界像素的反射(对称)
    items.append("BORDER_REFLECT");

        // 环绕边界模式  边界外的像素值从图像的另一边“环绕”过来 
    items.append("BORDER_WRAP");

        // 反射边界模式  (特定变种)    图像边界处只使用单个像素进行反射  
items.append("BORDER_REFLECT_101");

         OpenCV中的滤波函数:

bilateralFilter:可以用来获取图像的双边滤波拷贝

blur、boxFilter、sqrBoxFilter、GaussianBlur和medianblur:获取输入图像的平滑版本

filter2D:该函数是自定义滤波器应用于图像,需要为函数提供核矩阵

//sharpening image

Matx33f f2dkernel(0,-1,0,\n  -1,5,-1,\n 0,-1,0);

int depth = -1;

filter2D(inpMat,outMat,depth,f2dkernel);

//Edge detection

Matx33f f2dkernel(0,-1.5,0,\n  +1.5,-6,+1.5,\n 0,+1.5,0);

int depth = -1;

filter2D(inpMat,outMat,depth,f2dkernel);

Laplacian、Scharr、Sobel以及spatialGradient:处理图像的导数。

int depth = -1;

int dx = 1;int dy = 1;

int kernelSize = 3;

double scale = 5; double delta = 220;

Sobel(inpMat, outMat, depth, dx, dy, kernelSize, scale, delta);

 erode和dilate:腐蚀与膨胀。

morphologyEx:该函数可用于执行各种形态学运算。

        MORPH_ERODE: 结果与erode相同

        MORPH_DILATE: 结果与dilate相同

        MORPH_OPEN: 执行开运算,先腐蚀再膨胀

        MORPH_CLOSE: 执行闭运算,先膨胀再腐蚀

        MORPH_GRADIENT: 提取图像轮廓,用图像的腐蚀与膨胀图像相减

        MORPH_TOPHAT: 原始图像与开运算后的差

        MORPH_BLACKHAT: 闭运算后与原始图像的差

6.2图像变换功能

6.2.1 几何变换

        resize:用来调整图像大小

        warpAffine:执行仿射变换,要提供变换矩阵,getAffineTransform

        warpPerspective:实现透视变换

        remap:几何变换函数,可以完成图源像素到输出图像的重映射

6.2.2 其他变换

        颜色与颜色空间,颜色映射应用,傅里叶变换。

6.2.2.1 颜色与颜色空间

        允许使用cvtColor函数在不同的颜色间转换,该函数接受输入和输出图像以及一个变换码,后者是cv::ColorConversionCodes枚举中的一项。

//Convert BGR  to HSV color space

cvtColor(inputImage, outputImage, CV_BGR2HSV);

//Convert Grayscale to RBGA color space

cvtColor(inputImage, outputImage, CV_GRAY2RGBA);

        还提供applyColorMap函数可以将图像中的颜色映射到输出图像中的其他颜色,也要提供来自cv::ColormapTypes枚举的颜色类型

applyColorMap(inputImage, outputImage, COLORMAP_JET);

6.2.2.2 图像阈值化

         图像阈值化是图像分割的方法,而分割本身就是将图像按照强度、颜色或者其他图像属性区分为不同的像素组的过程。

        threshold:对图像应用一个固定级别的阈值。

        adaptiveThreshold:对灰度图应用自适应值。

 6.2.2.3 离散傅里叶变换

        图像的DFT可以用来挖掘原始图像中难以察觉的、不可见的信息。首先使用dft函数的得到图像的DFT,以生成含有复数值的频率函数。

        傅里叶变换看书看书看书看书看书看书。 

6.3 OpenCV绘图 

        color、thickness(轮廓)、lineType、shift、line、arrowedLine、rectangle、putText。 

6.4 模板匹配 

        使用正确的模板匹配并与良好的阈值相结合的话,可以有效的对图像中的对象进行检测和计数,通过matchTemplate的函数可以实现,可以是以下枚举列表:

        TM_SQDIFF; TM_SQDIFF_NORMED; TM_CCORR; TM_CCORR_NORMED;

        TM_CCOEFF; TM_CCOEFF_NORMED

        matchTemplate函数用大小为W*H的模板在大小为Q*S的图像上滑动,并使用在method参数中指定的方法,将模板与图像的所有重叠部分进行比较,然后将比较结果存储在结果Mat(result Mat)中。

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值