contours.sort_contours函数怎么使用

时间: 2023-06-07 16:09:03 浏览: 157
contours.sort_contours函数是OpenCV中对轮廓进行排序的函数,可以对轮廓按指定的顺序进行排序。该函数的使用方法如下: sort_contours(contours, method, reverse[, key]) 其中,contours是一个包含所有轮廓的数组,method是排序的方式,可以是cv2.RETR_EXTERNAL(从外部到内部)、cv2.RETR_LIST(按照图像中轮廓的顺序)、cv2.RETR_CCOMP(两层,内层是空洞,外层是物体边界)、cv2.RETR_TREE(树形结构)等。 reverse表示是否反转排序,key是排序依据的参数。 示例代码如下: contours, hierarchy = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours = contours.sort_contours(contours, method=cv2.CHAIN_APPROX_SIMPLE, reverse=False) 这段代码可以先使用cv2.findContours函数找到所有轮廓,然后使用sort_contours函数将其按照CHAIN_APPROX_SIMPLE方式进行排序。
相关问题

contours.sort_contours

contours.sort_contours是一个函数,用于对轮廓进行排序。它可以按照不同的标准对轮廓进行排序,例如按照轮廓的面积、左上角坐标或中心点坐标等进行排序。排序后,可以按照一定的顺序对轮廓进行处理,例如绘制、计算面积等。

myutils.sort_contours 一直报错

如果你使用myutils.sort_contours()函数出现了错误,可能是因为该函数没有正确导入或者函数参数有误。这个函数是自定义的,可能需要在代码中进行定义,所以你需要确保已正确导入该函数,并且正确传递了轮廓列表和排序标准参数。 以下是一个可能的实现示例,其中函数参数包括轮廓列表(contours)和排序标准(sorting_criteria): ``` import cv2 def sort_contours(contours, sorting_criteria): reverse = False i = 0 if sorting_criteria == "left-to-right": i = 1 elif sorting_criteria == "top-to-bottom": i = 0 reverse = True bounding_boxes = [cv2.boundingRect(c) for c in contours] (contours, bounding_boxes) = zip(*sorted(zip(contours, bounding_boxes), key=lambda b: b[1][i], reverse=reverse)) return contours, bounding_boxes ``` 在使用该函数时,你需要传递轮廓列表和排序标准。例如,以下是一个使用“从左到右”标准对轮廓进行排序的示例: ``` import cv2 import myutils image = cv2.imread("example.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) edged = cv2.Canny(gray, 50, 100) contours, hierarchy = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours, bounding_boxes = myutils.sort_contours(contours, "left-to-right") for c in contours: cv2.drawContours(image, [c], -1, (0, 255, 0), 2) cv2.imshow("Sorted Contours", image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 请确保在代码中正确导入myutils模块,并将myutils.sort_contours()函数定义在该模块中。如果你仍然遇到问题,请提供更多的错误信息和代码细节,以便更好地解决问题。

相关推荐

import cv2 from skimage.feature import hog from sklearn.neighbors import KNeighborsClassifier import joblib import numpy as np # 加载已经训练好的分类器 model_location = "C:/Users/27745/数字图像处理/knn.pkl" knn = joblib.load(model_location) def predict_digit(image): #获取一幅手写数字图像的输入,返回预测结果 # 将图像转换为灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊和大津二值化来预处理图像 blur = cv2.GaussianBlur(gray, (5, 5), 0) _, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # Find the contours and sort them largest-to-smallest contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours = sorted(contours, key=lambda ctr: cv2.boundingRect(ctr)[0]) # 提取每个字符的 ROI 并使用 HOG 特征提取方法进行特征提取 features = [] for cnt in contours: (x, y, w, h) = cv2.boundingRect(cnt) # 添加一定的边框,避免过小的ROI被压缩过多而失去特征 border_size = 20 roi = thresh[max(y - border_size, 0):min(y + h + border_size, image.shape[0]), max(x - border_size, 0):min(x + w + border_size, image.shape[1])] # 将ROI调整为28x28大小,并根据特征提取器生成的HOG描述符提取特征 resized_roi = cv2.resize(roi, (28, 28), interpolation=cv2.INTER_AREA) fd = hog(resized_roi, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), block_norm='L2-Hys') features.append(fd.reshape(-1, 1)) # 将提取的特征向量输入KNN模型进行预测 results = knn.predict(np.hstack(features)) # 返回数字串预测结果 return ''.join(str(result) for result in results) # 载入测试图片并进行预测 image_name = "C:/Users/27745/Desktop/test1.png" image = cv2.imread(image_name) # 将目标图像统一调整为相同的大小 image = cv2.resize(image, (300, 300)) # 利用封装的函数进行预测 result = predict_digit(image) print("The number is:", result)以上代码出现了X has 216 features, but KNeighborsClassifier is expecting 784 features as input.的问题,请帮我更正

最新推荐

recommend-type

图像处理案例一 信用卡数字识别

# 将符合的轮廓从左到右排序 sorted针对的是一个list 而sort_countours函数是针对多个轮廓数组 locs = sorted(locs, key=lambda x:x[0]) output = [] for(i,(x,y,w,h))in enumerate(locs): groupOutput = [] ...
recommend-type

Scrapy-1.8.2.tar.gz

文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

search-log.zip

搜索记录,包括时间、搜索关键词等,用于PySpark案例练习
recommend-type

6-12.py

6-12
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依