- 像素范围处理函数saturate_cast<uchar>()
- 定义掩膜:Mat kernel = (Mat_(char)(3,3)<<0,-1,0, -1,5,-1,0,-1,0);
- Filter2D(src, dst, src.depth(), kernel);
- 读Gray像素点:Scalar intensity = image.at<uchar>(row, col);( mage.at<uchar>(Point(row, col))
-
读RGC像素点:Vec3f intensity = img.at<Vec3f>(y,x);
Float blue = intensity.val[0];
- 转数据类型src.convertTo(dst, CV_32F);
-
第6课 图像混合
步骤:1. 直接处理
void AddWeighted(src1, alpha, src2, alpha, gamma, dest);
- 第7课 调整图像亮度和对比度:
- 第8课 模糊图像一
模糊处理:为了给图像预处理时的降低噪声。
步骤:1. 直接处理
均值滤波:取周围像素的平均值。
API:Blur(src, dst, Size(3,3), Point(-1,-1));
高斯滤波:能比较好地保留边缘信息。
API:GaussianBlur(src, dst,(Size(11,11), sigmax, sigmay);
- 第9课 模糊图像二
步骤:1. 直接处理
中值滤波:将周围像素点排序后,取中值。中值滤波对椒盐噪声有很好的抑报作用。
中值滤波API:medianBlur(src, dst, ksize);
高斯双边滤波:对于像素值差别太大的像素不进行滤波。高斯双边滤波是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像化廓不变。
高斯双边滤波API:bilateralFilter(src, dst, radius, threshold, space);
- 第10课 膨胀与腐蚀
步骤:1. 直接处理
膨胀:高亮部分被扩张。掩膜可以不是正方形的,可是横向,可以是纵向。
腐蚀:高亮部分被蚕食
Mat getStructuringElement(MORPH_RECT, Size(5,5), Point(-1,-1));
Dilate(src, dest, kernel);
Erode(src, dest, kernel);
- 第11课 开操作与闭操作
步骤:1. 直接处理
开操作:先腐蚀后膨胀,可以去掉小的对象。Y
API:morphologyEx(img, dst, MOR_OPEN,element);
闭操作:先膨胀后腐蚀,可以填充小的洞。
API:morphologyEx(img, dst, MOR_CLOSE,element);
形态学梯度:膨胀减去腐蚀,可以保留边缘轮廓。
API:morphologyEx(img, dst, MOR_GRADIENT,element);
顶帽:原图像与开操作之间差值,可以分离比邻近点亮一些的斑块。
API:morphologyEx(img, dst, MOR_TOPHAT,element);
黑帽:闭操作与原科像的的差值,用来分离比邻近点暗一些的斑块。
API:morphologyEx(img, dst, MOR_BLACKHAT,element);
-
第12课 提供水平和竖直直线
步骤:1.输入彩色图像imread;2.转像为灰度图像cvtcolor;3.转化为二值图像adaptiveThreshold;4.定义结构无素;5.开操作。
API:adaptiveThreshold(src, dest, 255, ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,15,-1); - 第13课 提供水平和竖直直线
步骤:1. 直接处理
下采样:缩小图像
上采样:放大图像
高斯不同:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像。
- 第14课 阈值操作
步骤:1. 直接处理
API:Threshold(src, dst,0,255,THRESH_TRIANGLE);
-
第15课 线性滤波
步骤:1. 直接处理
Robert算子
Sobel算子
拉普拉斯算子
- 第16课 边缘处理
API:copyMakeBorder(src, dst, top, bottom, left, right, bordertype, value);
- 第17课 Sobel算子边缘检测
步骤:1. 高斯滤波
2.转化为灰度图
3.Sobel处理
4. 计算图像A的像素绝对值,输出到图像B
5.AddWeighted
API:cv::Sobel
API:cv:: Scharr
- 第18课 Laplance算子边缘检测
API:Cv: Laplacian
- 第19课 Canny边缘检测
步骤:1.高斯模糊 – GaussianBlur,2灰度转换 – cvtColor,3.计算梯度 – Sobel/Scharr,4.非最大信号抑制,5.高低阈值输出二值图像
API:cv::Canny
- 第20课 .霍夫变换-直线
步骤:1.Canny边缘检测,2.霍夫直线检测。
API:cv::HoughLines
- 第21课 .霍夫圆变换
步骤:1.将图像转化到灰度空间,2.高斯滤波,3. 霍夫圆变换。
API:cv:: HoughCircles
- 第22课 像素映射
步骤:1.像素映射。
API:cv:: remap
- 第23课 直方图均衡化
步骤:1.将图像转化到灰度空间,2.直方图均衡化。
API:cv:: equalizeHist
- 第24课 直方图计算
步骤:1.将图像转化到灰度空间,2.直方图均衡化。
API:calcHist直方图计算,split把多通道图像分为多个单通道图像
- 第25课 直方图比较
步骤:1. 首先把图像从RGB色彩空间转换到HSV色彩空间cvtColor
2.计算图像的直方图,然后归一化到[0~1]之间calcHist和normalize;
3.使用四种比较方法之一进行比较compareHist。
API:cv::compareHist直方图比较
- 第26课 直方图反向投射
步骤:1.建立直方图模型
2.计算待测图像直方图并映射到模型中
3.从模型反向计算生成图像
。
API:cv::calcBackProject
- 第27课 模板匹配
步骤:1. 模板匹配。
API:cv:: matchTemplate
- 第28课 轮廓发现
步骤:1. 输入图像转为灰度图像cvtColor
2.使用Canny进行边缘提取,得到二值图像
3.使用findContours寻找轮廓
4.使用drawContours绘制轮廓
API:cv:: findContours,drawContours
- 第29课 凸包
步骤:1. 首先把图像从RGB转为灰度
2.然后再转为二值图像
3.在通过发现轮廓得到候选点
4.凸包API调用
5.绘制显示。
API:cv:: convexHull
- 第30课 轮廓周围绘制举行框和圆形框
步骤:1. 首先将图像变为二值图像
2.发现轮廓,找到图像轮廓
3.通过相关API在轮廓点上找到最小包含矩形和圆,旋转矩形与椭圆。
3.绘制它们。
API:cv:: approxPolyDP基于RDP算法实现,目的是减少多边形轮廓点数
boundingRect绘制一个矩形
minAreaRect返回旋转矩形
cv::minEnclosingCircle
cv::fitEllipse得到最小椭圆
- 第30课 图形矩
步骤:1. 提取图像边缘
2.发现轮廓
3.计算每个轮廓对象的矩
4.计算每个对象的中心、弧长、面积
API:cv:: moments
contourArea
arcLength
- 第31课 点多边形测试
步骤:1. 发现轮廓
2.对图像中所有像素点做点 多边形测试,得到距离,归一化后显示
API:cv:: pointPolygonTest
- 第32课 点多边形测试
步骤:1.将白色背景变成黑色-目的是为后面的变换做准备
2. 使用filter2D与拉普拉斯算子实现图像对比度提高,sharp
3. 转为二值图像通过threshold
4. 距离变换
5. 对距离变换结果进行归一化到[0~1]之间
6. 使用阈值,再次二值化,得到标记
7. 腐蚀得到每个Peak - erode
8.发现轮廓 – findContours
9. 绘制轮廓- drawContours
10.分水岭变换 watershed
11. 对每个分割区域着色输出结果
API:cv:: watershed, distanceTransform