C++OpenCV系统学习(4)——绘制形状与文字

本文介绍了如何使用OpenCV库在图像上绘制形状,如线条和矩形。通过cv::line和cv::rectangle函数,我们可以指定点坐标和颜色来创建图形。示例代码展示了如何绘制从(20, 30)到(300, 300)的红色线条,以及在(250, 220)位置,宽280,高250的蓝色矩形。这些API帮助开发者在计算机视觉项目中进行图像标注和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.绘制形状

        使用cv::Point与cv::Scalar

  • Point表示2D平面上一个点x,y  
Point p;
p.x=10;
p.y=8;
//或者

p=Point(10,8);
  • Scalar表示四个元素的向量
Scalar(a,b,c)//a=blue,b=green,c=red表示三通道

2.绘制形状的API

  • 画线:cv::line(LINE_4\LINE_\LINE_AA)
  • 画椭圆:cv::eclipse
  • 画矩形:cv::rectangle
  • 画圆:cv::circle
  • 画填充:cv::fillPoly

 2.1画线

void MyApi::draw_line_onImgage(Mat& image)
{
	Point p1 = Point(20, 30);
	Point p2;
	p2.x = 300;
	p2.y = 300;
	Scalar color = Scalar(0, 0, 255);
	line(image, p1, p2, color, 1, LINE_8);

	namedWindow("output", WINDOW_AUTOSIZE);
	imshow("output", image);
}

 2.2画矩形

void MyApi::draw_rectangle_onImage(Mat& image)
{
	Rect rect = Rect(250, 220, 280, 250);
	Scalar color = Scalar(255, 0, 0);
	rectangle(image, rect, color, 2, LINE_8);
	namedWindow("output", WINDOW_AUTOSIZE);
	imshow("output", image);

}

 其他的形状就不画了,都类似

### 使用C++OpenCV中实现形状检测 为了利用C++OpenCV执行形状检测,开发者需先确保环境已正确设置好OpenCV库[^1]。一旦确认无误,则可以按照如下方法编写程序来完成形状检测。 #### 加载图像 通过`cv::imread()`函数读取待处理图片文件至内存中的Mat对象以便后续操作: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("path_to_image", IMREAD_GRAYSCALE); } ``` #### 图像预处理 由于形状识别依赖于清晰的边界信息,在此阶段应将彩色图转换为灰度图,并应用阈值化技术使目标物体更加明显。此外,还可以采用形态学变换去除噪声干扰因素影响最终效果。 ```cpp // 转换为二值图像 threshold(src, binaryImage, 128, 255, THRESH_BINARY); // 形态学开运算去噪 morphologyEx(binaryImage, dst, MORPH_OPEN, getStructuringElement(MORPH_RECT, Size(5, 5))); ``` #### 查找轮廓 调用`findContours()`获取所有封闭区域内的像素点集合——即所谓的“轮廓”。这些数据结构对于理解几何特征至关重要。 ```cpp std::vector<std::vector<Point>> contours; std::vector<Vec4i> hierarchy; findContours(dst, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE); ``` #### 近似多边形曲线拟合 针对每一个找到的轮廓,计算其周长并基于该长度设定精度参数ε用于简化原始路径;接着运用`approxPolyDP()`得到更接近真实图形的折线表达形式。 ```cpp for (size_t i = 0; i < contours.size(); ++i) { double epsilon = 0.02 * arcLength(contours[i], true); std::vector<Point> approx; approxPolyDP(contours[i], approx, epsilon, true); // 判断顶点数量以确定具体是什么样的简单几何体 if (approxEps.size() == 3) putText(image, "Triangle", ...); // 绘制标签... else if (approxEps.size() == 4 && isContourConvex(approxEps)) putText(image, "Rectangle", ...); // 更复杂的逻辑可以根据实际需求扩展 } ``` 上述过程展示了如何借助C++编程语言配合强大的计算机视觉工具包OpenCV来进行基本的对象分类任务之一—形状辨识工作流[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI炮灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值