本人初学者一名,上图是我提取出来的轮廓,图像去噪效果不是很好,还是有很多,效果太差,分别使用了sobel,canny锐化边缘,用了高斯模糊除了,效果还是没有明显改善,向各位请教一下有什么好的方法能够吧图像中的六边形高质量的完全提取出来吗
如何使用opencv清晰地提取图像中的六边形轮廓,求效果及代码
本人初学者一名,上图是我提取出来的轮廓,图像去噪效果不是很好,还是有很多,效果太差,分别使用了sobel,canny锐化边缘,用了高斯模糊除了,效果还是没有明显改善,向各位请教一下有什么好的方法能够吧图像中的六边形高质量的完全提取出来吗
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 歇歇 2022-04-14 01:22关注
安装imutils
pip install imutils
代码
ShapeDetector.Pyimport cv2 class ShapeDetector: def __init__(self): pass def detect(self, c): shape = "" peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.04 * peri, True) if len(approx) == 6: shape ="六边形" return shape
detect_shapes.py
from pyimagesearch.shapedetector import ShapeDetector import argparse import imutils import cv2 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="输入图像的路径") args = vars(ap.parse_args()) image = cv2.imread(args["image"]) resized = imutils.resize(image, width=300) ratio = image.shape[0] / float(resized.shape[0]) gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1] cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) sd = ShapeDetector() for c in cnts: M = cv2.moments(c) cX = int((M["m10"] / M["m00"]) * ratio) cY = int((M["m01"] / M["m00"]) * ratio) shape = sd.detect(c) c = c.astype("float") c *= ratio c = c.astype("int") cv2.drawContours(image, [c], -1, (0, 255, 0), 2) cv2.putText(image, shape, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) cv2.imshow("Image", image) cv2.waitKey(0)
python detect_shapes.py --image 你的图形文件.png
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 数据库原理及应用上机练习题
- ¥30 征集Python提取PDF文字属性的代码
- ¥15 如何联系真正的开发者而非公司
- ¥15 有偿求苍穹外卖环境配置
- ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
- ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
- ¥15 clousx6整点报时指令怎么写
- ¥30 远程帮我安装软件及库文件
- ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
- ¥20 深信服vpn-2050这台设备如何配置才能成功联网?