opencv提取外部轮廓并在外部加矩形框

这段时间一直在用opencv搞图像处理的问题,发现虽然可调用的函数多,但是直接找相应代码还是很困难,就行寻找连通域,并在连通域外侧加框,对于习惯使用Mat矩形操作的我,真心感觉代码少之又少,为防止以后自己还会用到,特在此记录一下。


要对下面的图像进行字符的边缘检测。




程序中具体的步骤为:

(1)灰度化、二值化

(2)图像膨胀

(3)检测膨胀图像的边缘并叫外矩形框


实现代码如下:

#include "stdafx.h"
#include "stdio.h"
#include "Base_process.h"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <opencv2/opencv.hpp>
#include <tchar.h>
#include <iostream>
#include 
### OpenCV 中的轮廓提取方法 在 OpenCV 中,`findContours()` 函数用于检索图像中的轮廓。该函数可以识别二值图像中的白色对象边界,返回这些边界的坐标列表。 #### 使用 `findContours()` 为了成功执行轮廓检测,通常先要对输入图像进行预处理,将其转换为灰度图应用阈值化处理: ```python import cv2 import numpy as np # 载原始彩色图像 image = cv2.imread('example.jpg') # 将其转换为灰度模式 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 对灰度图像应用高斯模糊减少噪声 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 阈值化处理得到二值图像 _, thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY_INV) # 查找所有外部轮廓 contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` 上述代码片段展示了如何准备一张图片以便于后续的轮廓分析[^1]。 #### 绘制找到的轮廓 一旦获得了轮廓数据结构,就可以利用它们来绘制图形上的形状: ```python output_image = image.copy() for contour in contours: # 计算轮廓周围的最小外接矩形框 x, y, w, h = cv2.boundingRect(contour) # 在原图上画出矩形框标记物体位置 cv2.rectangle(output_image, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imshow("Detected Contours", output_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段脚本会遍历每一个发现的对象,在副本上描绘绿色方框以突出显示各个实体的位置[^3]。 #### 参数解释 - **mode**: 定义了检索模式的选择方式;常用的有 `RETR_LIST`, `RETR_TREE`, 和 `RETR_EXTERNAL`. - **method**: 描述了近似方法;常用的是 `CHAIN_APPROX_NONE`(存储所有的轮廓点) 或者 `CHAIN_APPROX_SIMPLE`(压缩水平、垂直方向以及斜线方向的冗余点).
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值