【OpenCV】基本数据类型及常见图像模式
是什么?能做什么?解决什么问题?为什么用它?
OpenCV:是一个基于开源发行的跨平台计算机视觉库,实现
一、应用场景:
- 目标识别:人脸、车辆、车牌...
- 自动驾驶
- 医学影像分析
- 视频内容理解与分析:文字识别、公众人物识别、物品分类...
二、opencv基本数据类型:
1. 点和向量类型
- 二维点,如:
Point2i
(或Point
):整数坐标点(x
,y
)。Point2f
:浮点数坐标点。Point2d
:双精度坐标点。
- 三维点,如:
Point3f
:三维浮点数点(x
,y
,z
)。
2. 标量类型(多通道值)
-
多通道值,常用于表示颜色或像素值(顺序为BGR)
Scalar(a, b, c)
:对于 BGR 图像,表示蓝色(B=a)、绿色(G=b)、红色(R=c)
Scalar green(0, 255, 0); // 绿色
- 单通道值,使用
uchar
或Scalar(val)
表示
Scalar(val)
:所有通道赋值为val
(如灰度图像)
uchar grayValue = 128; // 中灰度值
Scalar gray(128); // 等效表示
三、图像模式:
图像:一些亮度各异的点
- 位图模式:是1位二进制深度的图像,黑和白两种颜色
- 灰度模式:1个通道
- RGB模式:3个通道
(1)雪花屏:
Mat noise = cv::Mat::zeros(img.size(), CV_8UC1);
randu(noise, cv::Scalar::all(0), cv::Scalar::all(255));
-
第一个参数 (
noise
):-
这是一个输出参数,表示生成的随机数将存储在这个矩阵中。
noise
是一个cv::Mat
类型的变量,它预先定义了大小和类型(在这个例子中是CV_8UC1
,即8位无符号整型),用于存储生成的随机数。
-
-
第二个参数 (
cv::Scalar::all(0)
):-
这是生成随机数的最小值。
cv::Scalar::all
是一个方便的函数,用于创建一个所有元素都相同的cv::Scalar
对象。这里它创建了一个所有元素都是0的cv::Scalar
对象。
-
-
第三个参数 (
cv::Scalar::all(255)
):-
这是生成随机数的最大值。同样使用
cv::Scalar::all
函数,创建了一个所有元素都是255的cv::Scalar
对象。这意味着生成的随机数范围是从0到255。
-
(2)高斯模糊:
Mat gao_img;
GaussianBlur(img, gao_img, cv::Size(17,17), 0, 0);
参数说明
- src:输入图像(源图像)
- dst:输出图像(结果),必须与输入图像有相同的尺寸和类型
- ksize:高斯核大小,例如
Size(5, 5),必须为奇数
- sigmaX:X 方向的高斯核标准差
- sigmaY:Y 方向的高斯核标准差(默认 0,表示与 sigmaX 相同)
(3)中值滤波:
cv::medianBlur(img, imgBack, 53);
参数说明:第三个参数必须为奇数
(4)毛玻璃:
Mat glass_img;
blur(img, glass_img, cv::Size(15, 15));
(5)灰度
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
第三个参数:
COLOR_BGR2GRAY
:BGR → 灰度图COLOR_BGR2RGB
:BGR → RGBCOLOR_BGR2HSV
:BGR → HSVCOLOR_GRAY2BGR
:灰度图 → BGR
(6)方向模糊
void bilateralFilter(InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT);
Mat direction_img;
cv::bilateralFilter(img, direction_img, 29, 75, 75); // 常用参数组合
参数:
src
:输入图像(8 位或浮点型,单通道或三通道)。dst
:输出图像,与输入图像大小和类型相同。d
:滤波时使用的像素邻域直径。若为负数,则自动从sigmaSpace
计算。sigmaColor
:颜色空间滤波器的标准差,值越大表示越远的颜色会被混合。sigmaSpace
:坐标空间滤波器的标准差,值越大表示越远的像素会相互影响。borderType
:边界处理方式,默认BORDER_DEFAULT
。