OpenCV 是一个强大的开源计算机视觉库,用于处理图像和视频数据。它包含了众多功能,从基本的图像读取、保存,到复杂的图像处理、特征检测和三维重建等。以下是一些关于OpenCV的重要知识点的详细解释: 1. **读取和保存图像**: - `imread` 函数用于读取图像,它接受两个参数:图像文件名和一个可选的标志。例如,`imread("pj.bmp", 3)` 会读取名为 "pj.bmp" 的图像,并以三通道彩色模式(BGR)加载。标志值 0 表示单通道灰度图像,而 >0 表示三通道图像。 - `imwrite` 函数用于保存图像,它也需要文件名和图像对象。它可以根据文件扩展名自动确定图像类型,如 BMP 或 JPG。如果需要保存16位图像,可以选择 PNG 或 TIFF 格式。 2. **像素读写**: - 在OpenCV中,图像像素以 BGR 顺序排列。`Mat` 类型的 `.at<>` 方法可用于访问和修改像素值。例如,`cv::Vec3b value = img.at<cv::Vec3b>(62,381);` 获取指定坐标处的像素,而 `img.at<cv::Vec3b>(62,381) = value;` 则用于设置像素值。 3. **显示图像**: - `namedWindow` 创建一个窗口,`imshow` 将图像显示在这个窗口中。例如,`cv::namedWindow("image",CV_WINDOW_AUTOSIZE);` 创建一个名为 "image" 的窗口,`cv::imshow("image",img);` 将 `img` 显示在该窗口中。`waitKey` 函数用于暂停程序,等待用户按键事件。 4. **Mat类**: - `Mat` 类是OpenCV中的核心数据结构,它可以表示图像、矩阵或其他二维数据。例如,`Mat M(2,2, CV_8UC3, Scalar(0,0,255));` 创建了一个2x2的3通道8位无符号整数矩阵,并用 Scalar(0,0,255) 初始化所有元素,即白色像素。 5. **摄像机定标与三维重建**: - `findChessboardCorners` 函数用于在图像中寻找棋盘格角点,是摄像机定标的一步。参数包括输入图像、棋盘格的模式大小(行数和列数)、输出的角点数组以及可选的标志。标志可以用来优化角点检测过程。 - `cornerSubPix` 函数用于对初步找到的角点进行亚像素级别的精确定位。它需要输入图像、当前角点位置、搜索窗口大小、死区尺寸和终止条件。 6. **图像处理标志**: - 标志如 `CV_CALIB_CB_ADAPTIVE_THRESH` 和 `CV_CALIB_CB_NORMALIZE_IMAGE` 可以在寻找棋盘格角点时调整图像预处理,以提高检测效果。例如,`CV_CALIB_CB_ADAPTIVE_THRESH` 使用自适应阈值进行二值化,`CV_CALIB_CB_NORMALIZE_IMAGE` 进行伽马校正。 7. **TermCriteria** 结构体: - `TermCriteria` 用于定义迭代终止条件,常在优化过程中使用。例如,当达到最大迭代次数或误差阈值时停止迭代。 这些只是OpenCV库中的一部分功能,实际上OpenCV还包含许多其他功能,如特征检测、物体识别、图像分割、视频分析等。学习和掌握OpenCV对于进行计算机视觉项目和研究至关重要。
剩余10页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助