OpenCV图像轮廓(2)轮廓面积

OpenCV的图像轮廓有一些特征,像面积、弧长(其实就是轮廓的长度)、图像矩等。
先写一下相关术语中英文参照。
轮廓contour
特征feature
面积area
弧长perimeter
图像矩image moment
通过cv2.contourArea可以求得轮廓面积。
通过一个例子来演示一下,例如,想要过滤掉那些微小琐碎的轮廓,只显示lena这幅图中面积大于500的轮廓。代码思路是将findContours查找到的轮廓按照面积排序,然后绘制。

def contour_area():
    img = cv2.imread('../images/lena.jpg', cv2.IMREAD_GRAYSCALE)
    ret, thresh = cv2.threshold(img, 160, 255, cv2.THRESH_BINARY)
    contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 复制原图
    img1 = img.copy()
    # 创建一幅相同大小的白色图像
    img2 = np.ones(img.shape)
    # 按照面积将所有轮廓逆序排序
    contours2 = sorted(contours, key=lambda a: cv2.contourArea(a), reverse=True)
    for c in contours2:
        area = cv2.contourArea(c)
        print(area)
        # 只输出面积大于500轮廓
        if area<500:break
        # 分别在复制的图像上和白色图像上绘制当前轮廓
        cv2.drawContours(img1, [c],0, (0,255,0), 3)
        cv2.drawContours(img2, [c],0, (0,255,0), 3)
    plot_images(1,3,[img,img1,img2], gray=True)

运行界面如下图
轮廓面积例程运行结果
共有3幅图,分别是原始图像,在原始图像上绘制了轮廓,在白色背景图上绘制了轮廓。

程序的print输出内容如下

22757.5
10316.5
7935.0
6270.0
1317.5
1250.0
1132.0
769.0
699.5
371.5
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV图像轮廓是指在图像中连续的边界线。根据引用中的示例代码,我们可以使用OpenCV库来实现图像轮廓的查找和计算。 首先,我们需要读取图像并将其转换为灰度图像。可以使用cv2.imread()函数读取图像,然后使用cv2.cvtColor()函数将图像转换为灰度图像。 接下来,我们可以使用cv2.threshold()函数将灰度图像二值化,得到一个二值图像,其中只有两个像素值,一种是白色(255),一种是黑色(0)。函数中的阈值参数可以根据具体应用进行调整。 然后,我们可以使用cv2.findContours()函数查找图像中的轮廓。该函数返回两个结果,第一个结果是轮廓的列表,第二个结果是层级信息。轮廓是一系列坐标点的集合,描述了对象的边界。 接着,我们可以使用cv2.drawContours()函数将轮廓绘制在图像上。这个函数会直接修改原图像,如果想保持原图像不变,可以先复制一份。通过指定轮廓的索引,我们可以绘制特定的轮廓。 最后,我们可以使用cv2.contourArea()函数计算轮廓面积,使用cv2.arcLength()函数计算轮廓的周长。这两个函数都需要传入一个轮廓参数。 所以,OpenCV图像轮廓的实现步骤可以总结为以下几个步骤: 1. 读取图像并将其转换为灰度图像。 2. 使用阈值函数将灰度图像二值化。 3. 使用findContours函数查找图像中的轮廓。 4. 绘制轮廓在图像上。 5. 计算轮廓面积和周长。 希望这个回答能帮到你!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [opencv 图像轮廓的实现示例](https://download.csdn.net/download/weixin_38681736/12849896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [OpenCv图像轮廓](https://blog.csdn.net/weixin_64443786/article/details/131796588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值