OpenCV——常用函数

本文介绍了OpenCV库在图像处理中的几个关键操作:如何使用`circle()`函数绘制圆形,`addWeighted()`函数实现图像混合,以及通过`Moments`计算图像矩和中心矩。此外,还讲解了`boundingRect`函数在找到轮廓最小外接矩形上的应用。
摘要由CSDN通过智能技术生成

一、绘制圆形

使用OpenCV库中的`circle()`函数在图像上绘制圆形的代码。

        cv::circle(overlay, pt, 2, cv::Scalar(0,green,red),-1);  

具体来说,它的参数如下:

- `overlay`:图像,在该图像上绘制圆形;
- `pt`:圆心位置的`cv::Point`对象;
- `5`:圆形半径;
- `cv::Scalar(0,green,red)`:圆形的颜色,这里使用的是RGB颜色空间中的颜色值`[0,green,red]`。在这里,`green`和`red`变量的值分别控制了绿色和红色的比例,因此可以通过更改这些变量的值来获得不同颜色的圆形;
- `-1`:表示绘制一个实心圆形。

因此,这行代码的作用就是在名为`overlay`的图像上绘制一个圆心为`pt`,半径为5,颜色为指定颜色值的实心圆形。

二、图像混合

使用OpenCV库中的`addWeighted()`函数将两张图像进行混合的代码。

    cv::addWeighted(overlay,opacity,visImg,1-opacity,0,visImg);

具体而言,它的参数如下:

-  `overlay`:第一张图像,也称为背景图像;
-  `opacity`:`overlay`图像在混合中的不透明度,控制其在混合中的权重,取值范围为[0,1](0表示完全透明,1表示完全不透明);
-  `visImg`:第二张图像,也称为前景图像;
-  `1-opacity`:`visImg`图像在混合中的不透明度,即与`overlay`图像的透明度相反;
-  `0`:新图像的值被计算为两幅图像相加之和,再加上这个参数,即新图像的值为`alpha*overlay  +  beta*visImg  +  gamma`,其中gamma为用户自定义的值(这里为0);
-  `visImg`:混合后得到的新图像。

因此,这行代码的作用就是将具有不同透明度的两个图像混合到一起,即在`visImg`图像上叠加一张透明度为`opacity`的`overlay`图像。混合后的图像将被存储在`visImg`中,`overlay`图像不会被修改。

三、计算图像矩和中心矩

moments函数是OpenCV库中用于计算图像矩和中心矩的函数,其函数原型如下:

Moments moments(InputArray array, bool binaryImage=false);

其中,参数array是输入图像,可以是任意维度和通道数的矩阵(例如灰度图像、彩色图像、二值图像等)。参数binaryImage表示输入图像是否为二值图像,默认值为false,如果为true则只计算输入图像中值为255的像素。

该函数返回一个Moments对象,包含了所有的图像矩和中心矩。可以使用Moments对象的成员变量来获取各个阶数的矩值,例如:

  • double m00 = moments.m00; // 0阶图像矩,即图像面积
  • double m10 = moments.m10; // 1阶水平图像矩
  • double m01 = moments.m01; // 1阶垂直图像矩
  • double m20 = moments.m20; // 2阶水平图像矩
  • double m11 = moments.m11; // 2阶中心图像矩
  • double m02 = moments.m02; // 2阶垂直图像矩
  • ...

其中,mij表示i+j阶的图像矩,例如m10表示一阶水平图像矩,m01表示一阶垂直图像矩,m11表示二阶中心图像矩等。通过这些图像矩可以计算出图像的中心点坐标、面积、方向、轮廓等特征,是图像处理和计算机视觉中常用的工具之一。

四、最小外接矩形

`boundingRect`  是  OpenCV  中的一个函数,用于计算轮廓的最小外接矩形。具体用法如下:

Rect boundingRect(InputArray points);

其中  `points`  是输入的轮廓点集,类型为  `InputArray`,可以是一个  `vector`  或一个  `Mat`。函数返回值是包围输入轮廓的矩形区域,类型为  `Rect`。
例如,我们有一个轮廓点集  `contours`,可以用如下代码计算其外接矩形:

// 计算轮廓外接矩形
Rect rect = boundingRect(contours);

在  `boundingRect`  函数的返回值中,`x`  和  `y`  表示最小外接矩形的左上角坐标,`width`  和  `height`  表示矩形的宽度和高度。这样,我们就可以利用返回的  `Rect`  对象来描述轮廓的外接矩形,例如画出矩形:

// 在图像上绘制矩形
rectangle(img, rect, Scalar(0, 255, 0), 2);

其中,`img`  是要绘制矩形的图像,`Scalar(0,  255,  0)`  表示矩形的颜色,`2`  表示矩形边框的线宽。这样,产生的输出图像就会显示轮廓的最小外接矩形。

五、给图片加信息

cv::putText(image, "图片信息", cv::Point(rect.x, rect.y - 5), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 0, 255), 2, cv::LINE_AA);

使用`putText()`  函数在矩形框上方绘制数字名称。第一个参数是绘制名称的图像,第二个参数是名称字符串,第三个参数是名称的位置,第四个参数是字体类型,第五个参数是字体比例因子,第六个参数是字体颜色,第七个参数是文本粗细,最后一个参数是线型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值