我是靠谱客的博主 幸福睫毛,最近开发中收集的这篇文章主要介绍cv2.findContours、cv2.threshold函数的用法举例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文需要参考的内容:

  • cv2.threshold 请参考:https://blog.csdn.net/weixin_42296411/article/details/80901080
  • cv2.findContours 请参考:https://blog.csdn.net/Easen_Yu/article/details/89365497

具体内容如下:

图片内容

在这里插入图片描述

step1

import cv2
import numpy as np

img = cv2.imread('binary_img.jpeg',0)  # 0代表以灰度模式读入图片
print('img's shape is: {}'.format(img.shape))
cv2.imshow('raw',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

显示结果如下:

img's shape is: (158, 230)

在这里插入图片描述

step 2

retval, dst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) # retval就是返回的阈值; 我们设定的阈值就是127
print('retval is: {}'.format(retval))
for instanceId in np.unique(dst):
    print('instanceId is: {}'.format(instanceId))
    
cv2.imshow('dst',dst)
cv2.waitKey(0)
# if k ==27:     # 键盘上Esc键的键值
cv2.destroyAllWindows()

结果如下:

retval is: 127.0
instanceId is: 0
instanceId is: 255

在这里插入图片描述

step 3

# mode = cv2.RETR_EXTERNAL  method = cv2.CHAIN_APPROX_NONE
contour, _ = cv2.findContours(dst.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
print('The type of contour is: {}'.format(type(contour)))
print('{} polygon(s) in the contour'.format(np.array(contour).shape[0]))
for i in contour:
    print(i.shape)

结果如下:

The type of contour is: <class 'list'>
3 polygon(s) in the contour
(40, 1, 2)
(66, 1, 2)
(28, 1, 2)

step 4

# reshape(-1)把数据转换成一维了
polygons = [c.reshape(-1).tolist() for c in contour]
for cont in polygons:
    print(np.array(cont).shape)

结果如下:

(80,)
(132,)
(56,)

step 5

# 通过polygon找box
def polys_to_boxes(polys):
    """Convert a list of polygons into an array of tight bounding boxes."""
    boxes_from_polys = np.zeros((len(polys), 4), dtype=np.float32)
    for i in range(len(polys)):  # poly的shape应该是(c,n),c代表多边形的个数,n代表该多边形顶点个数的2倍。
        poly = polys[i]    # 这种写法对吗???
        x0 = min(poly[::2])
        x1 = max(poly[::2])
        y0 = min(poly[1::2])
        y1 = max(poly[1::2])
        boxes_from_polys[i, :] = [x0, y0, x1, y1]
    return boxes_from_polys

adc = polys_to_boxes(polygons)
print(adc)
[[158.  88. 173. 101.]
 [ 56.  64.  78.  88.]
 [143.  62. 154.  70.]]

最后

以上就是幸福睫毛为你收集整理的cv2.findContours、cv2.threshold函数的用法举例的全部内容,希望文章能够帮你解决cv2.findContours、cv2.threshold函数的用法举例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部