opencv的各模块

OpenCV 是一个流行的计算机视觉库,用于处理图像和视频数据,它包含了许多模块,以支持不同的计算机视觉任务。

主要分为以下模块:

1.Core 模块

这是 OpenCV 的核心模块,提供了基本的数据结构和功能,如图像加载、保存、绘图、数据类型转换等。

(1)基本的数据结构

Core 模块包括了许多基本数据结构,如 cv::Mat 用于存储图像和矩阵数据,以及 cv::Pointcv::Rectcv::Size 等用于表示点、矩形和大小的结构。

常用的数据结构:

Mat类:

1.使用构造函数创建 Mat 对象:
cv::Mat image; // 创建一个空的 Mat 对象


2.从图像文件加载:
cv::Mat image = cv::imread("image.jpg");

3.指定大小和数据类型创建 Mat 对象:
int rows = 480; // 图像高度
int cols = 640; // 图像宽度
int type = CV_8UC3; // 8位无符号整数,3通道 (彩色图像)

cv::Mat image(rows, cols, type);

4.从已有的数据创建 Mat 对象:
int rows = 480;
int cols = 640;
int type = CV_8UC1; // 8位单通道图像
unsigned char* data = new unsigned char[rows * cols]; // 示例图像数据

cv::Mat image(rows, cols, type, data);

5.从其他 Mat 对象复制数据:
cv::Mat source = cv::imread("source.jpg");
cv::Mat copy = source.clone();

Mat的方法有create(m,n,type),row(i),col(i),rowRange(i,j),colRange(i,j),diag(),clone(),copyTo(),reshape(), t(),inv(),size()等,具体意思就不细讲了,与matlab,python差不多,用的时候再看参数。

Point:代表二维点

Point pt;
pt.x = 10;
pt.y = 8;
//或
Point pt = Point(10,8)

Scalar:代表4元素向量,一般用于表示RGB颜色值,其中opencv读图进入到内存的格式时BGR,所以Scalar(B,G,R),第4个参数用不到可以省略。

(2)图像加载和保存

Core 模块可以加载和保存各种图像格式以及显示图像,包括常见的图像文件格式(如 JPEG、PNG、BMP)。

imread(),namedWindow(),imshow(),imwrite(),waitKey(),getchar(),通常是配套使用的。

 (3)数据类型转换

Core 模块提供了函数来进行不同数据类型之间的转换,例如从整数到浮点数,或者从一个颜色空间到另一个颜色空间的转换。  

void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0)
  • src:输入图像(cv::Mat 类型或其他适当的数据结构)。
  • dst:输出图像(cv::Mat 类型)。
  • code:颜色空间转换代码,表示从源颜色空间到目标颜色空间的转换。例如,cv::COLOR_BGR2GRAY 表示从 BGR 到灰度图,cv::COLOR_BGR2HSV 表示从 BGR 到 HSV。OpenCV 提供了许多这样的转换代码,以支持不同颜色空间之间的转换。
  • dstCn:目标图像的通道数。通常将其保留为默认值0。

(4)数学运算

使用 Core 模块进行各种数学运算,如矩阵乘法、矩阵加法、矩阵求逆等。

(5)随机数生成

Core 模块提供了随机数生成器,用于生成随机数或随机序列,这在许多图像处理和计算机视觉算法中很有用。

RNG产生随机数

(6)图像基本操作

包括图像的剪裁、缩放、旋转、平移、仿射变换等。

rect(x,y,width,height),resize(src,dst,size,fx,fy,interpolation),add(src,src2,dst,mask,dtype)

(7)通道的分离和合并

可以使用 Core 模块将多通道图像的通道分离成单独的通道,也可以将单通道图像的通道合并成多通道图像

(8)直方图操作

可以计算图像的直方图,用于图像处理任务,如直方图均衡化。

(9)线性代数操作

Core 模块包括线性代数函数,用于解线性方程组、矩阵分解等。

(10)图像和矩阵元素访问

Core 模块提供了一种灵活的方式来访问图像和矩阵中的像素值。

Mat img = imread(".....");
img.at<type>(x,y)[channel]

type是像素数据类型,x,y是像素坐标,channel是通道序号,灰度可以不加[ ],彩色可以指定。

(11)动态数据类型

创建动态数据类型,这使得图像处理和计算机视觉算法可以适应不同数据类型的图像。

附加:绘图函数,rectangle()矩形,ellipse()椭圆,circle()圆,fillpoly()多边形填充,line()直线,

2.HighGUI模块

OpenCV 的 HighGUI 模块是用于图形用户界面操作的模块,它提供了创建窗口、显示图像、响应鼠标和键盘事件等功能。这个模块用于创建简单的图形界面,以便用户可以与图像进行交互或进行视觉应用的实时演示。

以下是 HighGUI 模块的一些常见功能和函数:

  1. 创建窗口

    • cv::namedWindow():用于创建一个窗口,可以在其中显示图像。
    • cv::destroyWindow():用于关闭指定的窗口。
  2. 显示图像

    • cv::imshow():用于在指定窗口中显示图像。
    • cv::waitKey():用于等待用户按下键盘上的按键,并返回按下的按键的 ASCII 值。
  3. 处理鼠标事件

    • cv::setMouseCallback():用于设置鼠标事件的回调函数,以便在用户单击、拖动或释放鼠标时执行自定义操作。
  4. 处理键盘事件

    • cv::setKeyboardCallback():用于设置键盘事件的回调函数,以便在用户按下键盘上的按键时执行自定义操作。
  5. 控制图像显示

    • cv::moveWindow():用于移动窗口的位置。
    • cv::resizeWindow():用于更改窗口的大小。
    • cv::setWindowTitle():用于设置窗口的标题。
  6. 绘制文本和形状

    • cv::putText():用于在图像上绘制文本。
    • cv::rectangle()cv::circle() 等:用于在图像上绘制矩形、圆形等形状。
  7. 保存图像

    • cv::imwrite():用于将图像保存为文件。

HighGUI 模块允许您在图像处理应用中创建简单的交互式界面,使用户能够与图像进行互动,查看处理的结果,进行标记和测量等。这对于调试和演示视觉算法以及创建用户友好的应用程序非常有用。

3.ImgProc模块

OpenCV 的 ImgProc 模块(图像处理模块)提供了各种图像处理和计算机视觉功能,用于处理和分析图像。该模块包括了许多函数,用于执行各种图像操作,如滤波、边缘检测、形态学操作、直方图等。以下是一些 ImgProc 模块中常用的函数和功能:

  1. 图像滤波

    • cv::GaussianBlur():应用高斯模糊滤波。
    • cv::blur():应用均值滤波。
    • cv::medianBlur():应用中值滤波。
    • cv::bilateralFilter():应用双边滤波。
  2. 边缘检测

    • cv::Canny():执行 Canny 边缘检测。
    • cv::Sobel():执行 Sobel 边缘检测。
    • cv::Scharr():执行 Scharr 边缘检测。
    • cv::Laplacian():执行拉普拉斯边缘检测。
  3. 形态学操作

    • cv::erode():腐蚀操作。
    • cv::dilate():膨胀操作。
    • cv::morphologyEx():执行自定义形态学操作,如开运算、闭运算等。
    • cv::getStructuring():返回结构性元素
    • 形态梯度,用于寻找对象轮廓,morph_grad = dilate-erode
  4. 直方图操作

    • cv::calcHist():计算图像的直方图。
    • cv::equalizeHist():直方图均衡化,用于增强图像对比度。
  5. 图像转换和变换

    • cv::resize():调整图像大小。
    • cv::warpAffine():执行仿射变换。
    • cv::warpPerspective():执行透视变换。
  6. 阈值处理

    • cv::threshold():应用图像阈值处理。
    • cv::adaptiveThreshold():应用自适应图像阈值处理。
  7. 轮廓检测

    • cv::findContours():查找图像中的轮廓。
    • cv::drawContours():在图像上绘制轮廓。
  8. 凸包检测

    • cv::convexHull():查找轮廓的凸包。
  9. 图像模板匹配

    • cv::matchTemplate():执行模板匹配。
  10. 霍夫变换

    • cv::HoughLines():检测直线。
    • cv::HoughCircles():检测圆。

图像金字塔,pryUP()上采样并模糊化,pryDown()下采样并模糊化.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值