C++ opencv总结
在OpenCV中,cv::Mat 是一个非常重要的类,用于表示图像或多维数组。
1.创建 Mat 对象:
通过构造函数或者赋值操作符可以创建 Mat 对象。
Mat image; // 创建一个空的Mat对象
Mat grayImage(100, 100, CV_8UC1); // 创建一个100x100的灰度图像
Mat colorImage(200, 200, CV_8UC3, Scalar(0, 0, 255)); // 创建一个200x200的彩色图像并初始化为红色
2.访问像素:
使用 at 方法可以访问图像的像素值。
int x = 100;
int y = 50;
// 获取该位置的像素值
cv::Vec3b pixel = image.at<cv::Vec3b>(y, x);
3.图像复制:
.使用 clone() 方法创建图像的深拷贝,或者使用赋值操作符。
Mat copyImage = originalImage.clone(); // 深拷贝
Mat anotherCopy = originalImage; // 赋值操作,创建引用
4.图像赋值:
使用 setTo 方法可以将图像所有像素设置为指定值。
image.setTo(Scalar(255, 0, 0)); // 将图像所有像素设置为蓝色
5.通道分离和合并:
使用 split 方法可以将多通道图像分离成单通道图像,使用 merge 方法可以将单通道图像合并成多通道图像。
Mat channels[3];
split(colorImage, channels); // 将彩色图像分离成三个通道
merge(channels, 3, colorImage); // 将三个单通道图像合并成彩色图像
6.图像ROI(区域感兴趣):
通过定义矩形区域,可以获取图像的子区域。
Rect roi(10, 10, 50, 50); // 定义ROI的矩形区域
Mat regionOfInterest = image(roi); // 提取ROI
7.图像通道操作:
使用 cvtColor 可以进行颜色空间的转换,resize 可以改变图像的大小。
Mat grayImage;
cvtColor(colorImage, grayImage, COLOR_BGR2GRAY); // 转换为灰度图像
Mat resizedImage;
resize(image, resizedImage, Size(200, 200)); // 调整图像大小
8.图像运算:
OpenCV支持各种图像运算,如加法、减法、乘法等。
Mat result = image1 + image2; // 图像加法
Mat difference = abs(image1 - image2); // 图像减法
cv::Scalar 是 OpenCV 中用于表示多通道数据的数据类型。通常情况下,它用于表示颜色信息,尤其是在彩色图像中。cv::Scalar 可以包含1到4个数值,分别对应于灰度图像、单通道图像、三通道图像(如BGR颜色),或四通道图像(如BGRA颜色)的通道值。
1.创建 Scalar 对象:
// 创建灰度值为 128 的 Scalar 对象
Scalar grayValue(128);
// 创建三通道颜色为 (0, 255, 0) 的 Scalar 对象
Scalar greenColor(0, 255, 0);
// 创建四通道颜色为 (0, 255, 0, 128) 的 Scalar 对象
Scalar semiTransparentGreen(0, 255, 0, 128);
2.使用 Scalar 设置图像颜色:
Mat colorImage(100, 100, CV_8UC3, Scalar(255, 0, 0)); // 创建一个蓝色的图像
3.在图像上绘制颜色:
Mat image(200, 200, CV_8UC3, Scalar(255, 255, 255)); // 创建一个白色的图像
// 在图像上绘制绿色矩形
rectangle(image, Point(50, 50), Point(150, 150), Scalar(0, 255, 0), 2);
// 在图像上绘制红色圆形
circle(image, Point(100, 100), 30, Scalar(0, 0, 255), -1);
4.Scalar 的运算:
Scalar color1(10, 20, 30);
Scalar color2(40, 50, 60);
Scalar sum = color1 + color2; // 对应通道相加
Scalar product = color1 * 2; // 所有通道乘以2
在处理图像时,cv::Scalar 提供了一种方便的方式来表示和操作颜色信息。它可以与其他 OpenCV 数据类型进行运算,并用于在图像上设置颜色值。
cv::Point 是 OpenCV 中用于表示二维点的类。它主要用于在图像处理和计算机视觉应用中存储和操作二维坐标。
以下是关于 cv::Point 的一些基本信息:
1.定义:
cv::Point 是一个模板类,可以表示不同类型的二维坐标点。通常,它用于表示整数坐标点 (cv::Point_
2.构造函数:
cv::Point pt; // 默认构造函数,创建一个坐标为 (0, 0) 的点
cv::Point pt(10, 20); // 创建一个坐标为 (10, 20) 的点
3.成员变量:
int x = pt.x; // 获取点的 x 坐标
int y = pt.y; // 获取点的 y 坐标
4.基本操作:
cv::Point pt1(10, 20);
cv::Point pt2(5, 10);
cv::Point ptSum = pt1 + pt2; // 点的加法
cv::Point ptDiff = pt1 - pt2; // 点的减法
cv::Point ptScaled = pt1 * 2; // 点的标量乘法
5.使用场景:
cv::Point 常用于表示图像中的像素坐标,处理图像中的兴趣区域(ROI),绘制图形和标记等。在许多 OpenCV 函数中,cv::Point 被广泛用于指定图像上的位置信息。
示例:
cv::Point pt1(100, 150);
cv::circle(image, pt1, 5, cv::Scalar(0, 255, 0), -1); // 在图像上绘制一个半径为5的绿色实心圆
在上述示例中,cv::circle 函数使用了 cv::Point 来指定圆心的位置。
总体而言,cv::Point 是 OpenCV 中用于处理二维坐标的便捷工具,使得在图像处理中能够更容易地表示和操作点的位置信息。
cv::Rect 是 OpenCV 中用于表示矩形区域的类。它经常用于图像处理和计算机视觉中,用于指定感兴趣区域(Region of Interest,ROI)或在图像上执行操作的矩形。
以下是关于 cv::Rect 的一些基本信息:
1.定义:
cv::Rect 是一个模板类,用于表示二维矩形区域。它有多个构造函数,允许你通过不同的方式定义矩形。
cv::Rect rect; // 默认构造函数,创建一个无效的矩形
cv::Rect rect(x, y, width, height); // 创建一个矩形,左上角坐标为 (x, y),宽度为 width,高度为 height
2.成员变量:
int x = rect.x; // 获取矩形左上角的 x 坐标
int y = rect.y; // 获取矩形左上角的 y 坐标
int width = rect.width; // 获取矩形的宽度
int height = rect.height;// 获取矩形的高度
3.基本操作:
cv::Rect rect1(10, 20, 30, 40);
cv::Rect rect2(5, 10, 20, 30);
cv::Rect rectSum = rect1 + rect2; // 矩形的加法
cv::Rect rectIntersection = rect1 &rect2; // 矩形的交集
4.使用场景:
cv::Rect 常用于指定图像中的感兴趣区域,裁剪图像,以及在图像上标记或绘制矩形。它在图像处理函数中作为参数使用,用于指定需要处理的区域。
示例:
cv::Mat image = cv::imread("example.jpg");
cv::Rect roi(100, 150, 200, 100); // 定义感兴趣区域
cv::Mat croppedImage = image(roi); // 提取感兴趣区域的图像
在上述示例中,cv::Rect 用于定义感兴趣区域,并通过该区域提取了原始图像的子图像。
总体而言,cv::Rect 是 OpenCV 中用于表示矩形区域的重要类,为处理图像中的区域提供了便捷的工具。
未完待续。。。